我正在尝试在一行中输出完整目录路径和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是为了确保不会截断过长的目录名称和路径,但在拉动两个属性时从未使用它。我希望这些信息都在一条线上,但还没有成功。在此先感谢您的帮助。
答案 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,以及为路径,输出文件和所有有趣的东西创建参数来进一步实现此目的。
请告诉我这是否有帮助!