[英]Powershell — Get-ChildItem Directory full path and lastaccesstime
我试图在一行中输出完整的目录路径和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以确保不会截断过长的目录名和路径,但是在提取两个属性时从未使用过它。 我希望这些信息可以全部显示,但没有成功。 在此先感谢您的协助。
我建议在选择所需的属性之前过滤( Where-Object
)。 另外,我认为您想用Select-Object
替换ForEach-Object
,最后我认为您需要Export-Csv
而不是Out-File
。 例:
Get-ChildItem -Path "R:\" -Directory |
Where-Object { $_.LastAccessTime -lt [DateTime]::Today.AddYears(-2) } |
Select-Object FullName,LastAccessTime |
Export-Csv C:\temp\test.csv -NoTypeInformation
我们可以很容易地在一行上输出您的输出,但是为了易于阅读,我们可能需要将脚本分成多行。 我建议将下面的脚本另存为“ .ps1”,这样您可以右键单击并选择“使用powershell运行”,以使其在将来更加容易。 可以对该脚本进行修改以使用更多的输入和变量,以使其更具模块化,并在更多情况下工作,但是现在,我们将使用您提供的常量。
$dirs = Get-ChildItem -Path "R:\" -Directory
我们会保留您所做的第一行,因为这是可靠的,没有任何更改。
$arr = $dirs | Select-Object {$_.FullName, $_.LastAccessTime} | Where-Object{ $_.LastAccessTime -lt [datetime]::Today.AddYears(-2) }
对于第二行,我们将使用“选择对象”。 我认为,以这种方式创建数组要容易得多。 我们希望将答案作为一个数组来处理,因为这样最容易将键,值对彼此相邻地发布。 我已经将“ 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以及为路径,输出文件和所有有趣的东西创建参数来进一步实现此目的。
让我知道这是否有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.