有没有办法在 PowerShell 中获取集合中每个成员的属性值无需使用 Foreach环形?
例如,具有以下条目的目录:
$items
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/11/2023 6:08 AM 16 file1.txt
-a---- 3/11/2023 6:08 AM 28 file2.txt
-a---- 3/11/2023 6:08 AM 34 file3.txt
我想到获取每个对象length
属性的唯一方法是:
Foreach($i in $items)
{
$i.Length
}
有没有其他方法可以length
不使用循环来获取每个对象的属性foreach
?
答案1
正如评论中提到的,您可以使用选择对象并使用 的标题列指定每个对象的属性名称,length
并为每个对象指定一个结果bytes
。
$items | Select-Object Length;
输出
Length
------
26190
5130
8100
您还可以使用以下方法从使用属性定义的数组对象中选择特定的属性值:计算财产使用定义的表达式来表示您要寻求的结果,而无需通过循环foreach
。
此 PowerShell 示例将从每个对象中选择长度属性值(以千字节为单位)。
$items | Select-Object @{Name="KBytes";Expression={ "{0:N0}" -f ($_.Length / 1KB ) }};
输出
KBytes
------
26
5
8
此 Powershell 示例将从每个对象中选择长度属性值(以字节为单位)。
$items | Select-Object @{Name="Bytes";Expression={ "{0:N0}" -f ($_.Length / 1 ) }};
输出
Bytes
-----
26,190
5,130
8,100
此 PowerShell 还选择了长度属性,但也通过管道将其传递测量对象为您提供每个对象的具体字节数或千字节数。
$items | Select-Object @{N="Bytes"; E={ ($_ | Measure-Object -Sum Length).Sum / 1 } };
输出
Bytes
-----
26190
5130
8100
$items | Select-Object @{N="KBytes"; E={ ($_ | Measure-Object -Sum Length).Sum / 1KB } };
输出
KBytes
------
25.576171875
5.009765625
7.9101562
最后(可选)对于更短的语法形式,这可能有助于简化逻辑,如果这是使用的主要目标foreach 方法循环,但代码行数较少。
$items.Foreach({$_.Length});
输出(以字节为单位)
26190
5130
8100
支持资源
答案2
还有一个隐式的 FOrEach - 通过管道将集合筛选:
Filter ItemSize {$_.Length}
$Items = gci -af
$Items | ItemSize
输出:
PS > Filter ItemSize {$_.Length}
>>
>> $Items = gci -af
>>
>> $Items | ItemSize
3764
3764
2256896
46
42326
46
答案3
根据我的评论。```[0]`` 仅表示获取第一个项目。
Clear-Host
(Get-ChildItem -Path 'D:\Temp' -File)[0]
# Results
<#
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 23-Mar-21 13:28 395347 (MSINFO32) command-line tool switches.zip
#>
Clear-Host
((Get-ChildItem -Path 'D:\Temp' -File)[0]).Length
# Results
<#
395347
#>
$Properties = @(
'Mode',
'LastWriteTime',
'Length',
'Name'
)
$Properteis.Count
Clear-Host
(Get-ChildItem -Path 'D:\Temp' -File)[0] |
Select-Object -Property $Properties
# Results
<#
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 23-Mar-21 13:28:51 395347 (MSINFO32) command-line tool switches.zip
#>