PowerShell中如何同时展开Hash与Path属性并输出文件信息?
PowerShell提取文件大小、MD5哈希与文件路径的格式化输出问题
执行以下PowerShell代码:
get-childitem -path "E:\Test 1" -Recurse -File | foreach-Object { $fsize=(get-Item $_.FullName).Length ; $hash=(get-FileHash $_.Fullname -Algorithm MD5 | Select-Object Hash,Path ); write-host $fsize $hash }
得到的输出为:
18 @{Hash=2FC4C77B6792F3DA856E77486F849105; Path=E:\Test 1\file 1.txt}
需要实现直接显示文件大小、文件哈希和文件路径,格式如下:
18 2FC4C77B6792F3DA856E77486F849105 E:\Test 1\file 1.txt
已知-ExpandProperty只能展开单个属性,仅展开Hash的代码可正常运行:
get-childitem -path "E:\Test 1" -Recurse -File | foreach-Object { $fsize=(get-Item $_.FullName).Length ; $hash=(get-FileHash $_.Fullname -Algorithm MD5 | Select-Object Hash,Path -ExpandProperty Hash); write-host $fsize $hash }
输出结果:
18 2FC4C77B6792F3DA856E77486F849105
但-ExpandProperty无法同时指定多个属性,以下代码无法运行:
get-childitem -path "E:\Test 1" -Recurse -File | foreach-Object { $fsize=(get-Item $_.FullName).Length ; $hash=(get-FileHash $_.Fullname -Algorithm MD5 | Select-Object Hash,Path -ExpandProperty Hash,Path); write-host $fsize $hash }
解决方案
无需使用-ExpandProperty,直接访问Get-FileHash返回对象的Hash和Path属性即可,同时可以简化文件大小的获取(直接用$_对象的Length属性,无需重复调用Get-Item):
Get-ChildItem -Path "E:\Test 1" -Recurse -File | ForEach-Object { $fileSize = $_.Length $hashInfo = Get-FileHash $_.FullName -Algorithm MD5 Write-Host $fileSize $hashInfo.Hash $hashInfo.Path }
也可以使用字符串格式化来确保输出格式统一:
Get-ChildItem -Path "E:\Test 1" -Recurse -File | ForEach-Object { $fileSize = $_.Length $hashInfo = Get-FileHash $_.FullName -Algorithm MD5 Write-Host ("{0} {1} {2}" -f $fileSize, $hashInfo.Hash, $hashInfo.Path) }
两种方法均可得到期望的输出格式。
内容的提问来源于stack exchange,提问作者HTWingNut
相关产品推荐
相关产品推荐

