繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM