Powershell -- 获取 ChildItem 目录完整路径和上次访问时间
Powershell -- Get-ChildItem Directory full path and lastaccesstime
我试图在一行中输出完整的目录路径和上次访问时间。
需要 --
R:\Directory1\Directory2\Directory3, 1015 年 3 月 10 日
我得到的——
回复:\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”,这将允许您右键单击和 select "run with powershell" 以便将来更容易。可以修改此脚本以使用更多输入和变量,以使其更加模块化并在更多情况下工作,但现在我们将使用您提供的常量。
$dirs = Get-ChildItem -Path "R:\" -Directory
我们将保留您制作的第一行,因为那是可靠的,没有什么可更改的。
$arr = $dirs | Select-Object {$_.FullName, $_.LastAccessTime} | Where-Object{ $_.LastAccessTime -lt [datetime]::Today.AddYears(-2) }
对于第二行,我们将使用 "Select-Object"。在我看来,以这种方式创建数组要容易得多。我们希望将答案作为一个数组来处理,因为通过这种方式 post 键值对彼此相邻是最简单的。我已将您的 "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,并为您的路径、输出文件和所有有趣的东西创建参数来更进一步。
如果有帮助请告诉我!
我试图在一行中输出完整的目录路径和上次访问时间。
需要 -- R:\Directory1\Directory2\Directory3, 1015 年 3 月 10 日
我得到的—— 回复:\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”,这将允许您右键单击和 select "run with powershell" 以便将来更容易。可以修改此脚本以使用更多输入和变量,以使其更加模块化并在更多情况下工作,但现在我们将使用您提供的常量。
$dirs = Get-ChildItem -Path "R:\" -Directory
我们将保留您制作的第一行,因为那是可靠的,没有什么可更改的。
$arr = $dirs | Select-Object {$_.FullName, $_.LastAccessTime} | Where-Object{ $_.LastAccessTime -lt [datetime]::Today.AddYears(-2) }
对于第二行,我们将使用 "Select-Object"。在我看来,以这种方式创建数组要容易得多。我们希望将答案作为一个数组来处理,因为通过这种方式 post 键值对彼此相邻是最简单的。我已将您的 "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,并为您的路径、输出文件和所有有趣的东西创建参数来更进一步。
如果有帮助请告诉我!