Powershell - Get-ChildItem目录完整路径和lastaccesstime

时间:2017-10-24 16:13:15

标签: powershell get-childitem

我正在尝试在一行中输出完整目录路径和lastaccesstime。

需要 - R:\ Directory1 \ Directory2 \ Directory3,1015年3月10日

我得到了什么 - R:\ directory1中\ Directory2 \ directory3目录

1015年3月10日

这是我的代码,它并不复杂,但它超出了我的范围。

Get-ChildItem -Path "R:\" -Directory | foreach-object -process{$_.FullName, $_.LastAccessTime} | Where{ $_.LastAccessTime -lt [datetime]::Today.AddYears(-2) } | Out-File c:\temp\test.csv

我过去使用过foreach-object是为了确保不会截断过长的目录名称和路径,但在拉动两个属性时从未使用它。我希望这些信息都在一条线上,但还没有成功。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我建议在选择所需的属性之前过滤(DB_URL=jdbc:jtds:sqlserver://localhost:1433/TesteIntegracao )。另外,我认为您希望将Where-Object替换为ForEach-Object,最后我认为您需要Select-Object而不是Export-Csv。例如:

Out-File

答案 1 :(得分:1)

我们可以非常轻松地将您的输出放在一行上,但为了便于阅读,我们可能需要将您的脚本拆分为多行。我建议将下面的脚本保存为“.ps1”,这样您就可以右键单击并选择“使用powershell运行”,以便将来更轻松。可以修改此脚本以使用更多输入和变量,以使其更加模块化并在更多情况下工作,但是现在我们将使用您提供的常量。

$dirs = Get-ChildItem -Path "R:\" -Directory

我们会保留你制作的第一行,因为那是坚实的,没有什么可以改变的。

$arr = $dirs | Select-Object {$_.FullName, $_.LastAccessTime} |  Where-Object{ $_.LastAccessTime -lt [datetime]::Today.AddYears(-2) }

对于第二行,我们将改为使用“Select-Object”。在我看来,以这种方式创建数组要容易得多。我们希望将答案作为一个数组来处理,因为以这种方式将密钥,值对彼此相邻发布是最容易的。我已将“Where”扩展为“Where-Object”,因为最佳做法是使用完整的cmdlet名称而不是别名。

最后,我们要在放入临时文件之前将“$ arr”对象转换为csv。

ConvertTo-CSV $arr | Out-File "C:\Temp\test.csv"

总而言之,您的最终脚本将如下所示:

$dirs = Get-ChildItem -Path "C:\git" -Directory
$arr = $dirs | Select-Object {$_.FullName, $_.LastAccessTime} | Where{ $_.LastAccessTime -lt [datetime]::Today.AddYears(-2) }
ConvertTo-CSV $arr | Out-File "C:\Temp\test.csv"

同样,您可以通过创建函数,将其绑定到cmdlet,以及为路径,输出文件和所有有趣的东西创建参数来进一步实现此目的。

请告诉我这是否有帮助!

相关问题