当我运行此命令时:
$k = Get-Process | select Name -First 3
我得到了这个输出:
Name ---- AESTSr64 ApplicationFrameHost BtwRSupportService
我想将每个结果放在string类型的单独变量中并获取其长度。我想知道如何访问返回的各个行。
我尝试了一个foreach如下:
foreach ($k in $three) {
write $k
}
获取
Name ---- AESTSr64 ApplicationFrameHost BtwRSupportService
我想只输出没有标题和破折号的结果,并在同一行显示每个字符串的长度(当我使用.ToString()
转换输入时,我得到空字符串和零长度,因为每个结果是作为对象对待)。
我尝试了这个,但它产生了错误的长度:
foreach ($k in $three) {
$t = $k | Out-String
write ("{0} {1}", $t, $t.Length)
}
那我该如何制作这样的东西:
AESTSr64 08 ApplicationFrameHost 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
}
答案 0 :(得分:2)
我想将每个结果放在一个单独的类型变量中 字符串并获取其长度。我想知道如何访问个人 行返回。
您可以将结果存储在变量中,但通常它不具有类型字符串,它将是Process对象的数组。如果你真的想要字符串,你可以这样做:
$p = get-process | select -first 3 | ForEach-Object name
但是$p
仍然是一个数组,所以它的长度为3!您可以将长度第一个值设为$p[0].length
...或者您可以像这样划分各个值:
$p1, $p2, $p3 = get-process | select -first 3 | ForEach-Object name
但请注意,在最后一个示例中,如果要返回的对象超过3个,那么p3
将是除前两个对象之外的所有对象...
答案 1 :(得分:2)
你可以做到这一点:)
get-process | select Name, @{Name="NameLength";expression={$_.Name.length}} -first 3
如果你想在结果上循环:
$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)
}