3

假设我调用Get-Service并希望ID使用打印递增整数的 cmdlet 输出分配一个新列,以便:

ID  Status Name                            DisplayName
--  ------ ----                            -----------
 0 Running AdobeARMservice                 Adobe Acrobat Update Service
 1 Stopped AeLookupSvc                     Application Experience
 2 Stopped ALG                             Application Layer Gateway Service

我现在正在尝试使用Select-Object来添加此列,但我不太明白如何在这种表达式中迭代变量。这是我所拥有的:

Get-Service |
Select-Object @{ Name = "ID" ; Expression= {  } }, Status, Name, DisplayName |
Format-Table -Autosize

有没有办法在 内迭代整数Expression= { },还是我以错误的方式解决这个问题?

4

2 回答 2

9

您可以这样做,但您需要在主表达式之外维护一些计数器变量。

$counter = 0
Get-Service |
Select-Object @{ Name = "ID" ; Expression= {$global:counter; $global:counter++} }, Status, Name, DisplayName |
Format-Table -Autosize

另一种选择,可能更清洁

Get-Service `
|% {$counter = -1} {$counter++; $_ | Add-Member -Name ID -Value $counter -MemberType NoteProperty -PassThru} `
| Format-Table ID
于 2013-08-07T18:17:17.797 回答
2

用不同的方式问了同样的问题,得到了以下答案

$x = 10
Get-Service |
Select-Object @{ Name = "ID" ; Expression={ (([ref]$x).Value++) }}, Status, Name, DisplayName | Format-Table -Autosize

我完全不清楚表达式是在 Select-Object 的范围内调用的,而不是在管道的范围内。[ref]限定符将增量的结果提升到管道的范围,实现与显式将变量指定为全局相同的结果。

于 2017-06-04T15:17:07.553 回答