在Powershell中如何“展开属性”多个值?

问题描述 投票:0回答:1

看起来这应该很简单。

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}

现在我只想显示文件大小、文件哈希、文件路径。

我知道我可以将

-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); 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 }

如何提取路径,使其显示如下?

18 2FC4C77B6792F3DA856E77486F849105 E:\Test 1\file 1.txt

预先感谢您对我的耐心和帮助。

powershell foreach expandoobject
1个回答
1
投票

您不需要调用

Get-Item
来检索文件的
Length
- 您已经从
Get-ChildItem
获得了完全相同的信息。

为了从附加到每个文件的

Get-FileHash
获取多个属性值,而不必为每个文件多次调用
Get-FileHash
,您可以连续使用
Select-Object
两次,首先从
Get-FileHash
提取输出,然后使用
-ExpandProperty
来反对:

$files = Get-ChildItem -Path "E:\Test 1" -Recurse -File
$lengthAndHashObject = $files |Select Length,@{Name='FileHashOutput';Expression={$_ |Get-FileHash |Select-Object Hash,Path}} 
$finalObjects = $lengthAndHashObject |Select Length -ExpandProperty FileHashOutput

# or as a single pipeline:
Get-ChildItem -Path "E:\Test 1" -Recurse -File |Select Length,@{Name='FileHashOutput';Expression={$_ |Get-FileHash |Select-Object Hash,Path}} |Select Length -ExpandProperty FileHashOutput

Path
获得的
Get-FileHash
值也不是真正必要的 - 您已经从文件信息对象上的
FullName
属性获得了相同的信息,并且可以使用
Select-Object
执行一次传递:

Get-ChildItem -Path "E:\Test 1" -Recurse -File |Select Length,@{Name='Path';Expression='FullName'},@{Name='Hash';Expression={$_ |Get-FileHash |ForEach-Object Hash}}
© www.soinside.com 2019 - 2024. All rights reserved.