我正在尝试在一行中输出完整的目录路径和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,以确保不会截断过长的目录名和路径,但在提取两个属性时从未使用过它。我希望所有的信息都在一行上,但还没有成功。提前感谢你的帮助。
发布于 2017-10-25 00:24:41
我建议在选择你想要的属性之前过滤(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发布于 2017-10-25 00:29:57
我们可以很容易地将您的输出放在一行上,但为了便于阅读,我们可能需要将脚本拆分成多行。我建议将下面的脚本另存为".ps1“,这样你就可以右击并选择"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“。在我看来,以这种方式创建数组要容易得多。我们希望将答案作为一个数组来处理,因为以这种方式将键、值对彼此放在一起是最容易的。我已经将您的"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,并为您的路径、输出文件和所有有趣的东西创建参数。
如果这有帮助,请告诉我!
https://stackoverflow.com/questions/46915346
复制相似问题