循环遍历结果集

NoC*_*nce 2 powershell

当我运行此命令时:

$k = Get-Process | select Name -First 3
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

姓名
----
AESTSr64
应用框架主机
支持服务

我想将每个结果放在一个单独的字符串类型变量中并获取其长度。我想知道如何访问返回的单个行。

我尝试了一个 foreach 如下:

foreach ($k in $three) {
  write $k
}
Run Code Online (Sandbox Code Playgroud)

要得到

姓名
----
AESTSr64
应用框架主机
支持服务

我只想输出没有标题和破折号的结果,并在同一行上显示每个字符串的长度(当我使用转换输入时,.ToString()我得到空字符串和零长度,因为每个结果都被视为一个对象)。

我试过这个,但它产生了错误的长度:

foreach ($k in $three) {
  $t = $k | Out-String
  write ("{0} {1}", $t, $t.Length)
}
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能产生这样的东西:

AESTSr64 08
应用框架主机 20
BtwRSupportService 18

编辑

使用以下答案和注释获得所需结果的一种方法:

$three = Get-Process | select -First 3 | ForEach-Object Name
foreach ($k in $three) {
  [string]$c = "{0,-15} {1}" -f $k, $k.Length
  Write-Host $c
}
Run Code Online (Sandbox Code Playgroud)

Esp*_*o57 7

你可以简单地做到:)

   get-process | select Name, @{Name="NameLength";expression={$_.Name.length}} -first 3
Run Code Online (Sandbox Code Playgroud)

如果你想循环结果:

 $list=get-process | select Name, @{Name="NameLength";expression={$_.Name.length}} -first 3

 foreach ($item in $list)
 {
     write-host ("{0} {1}" -f $item.Name, $item.NameLength)
 }
Run Code Online (Sandbox Code Playgroud)