2016-10-02 94 views
0

当我运行此命令:通过结果循环设置

$k = Get-Process | select Name -First 3 

我得到这样的输出:

Name 
---- 
AESTSr64 
ApplicationFrameHost 
BtwRSupportService

我想每个结果放在一个字符串类型的独立的变量,并得到它的长度。我想知道如何访问返回的单个行。

我试过一个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 
} 
+1

'$ k' - >'$ k.Name' –

+0

@ MathiasR.Jessen,非常好的评论,我改成了[string] $ t = $ k.Name,并且修正了长度。谢谢。 – NoChance

+1

''[string]'是不必要的,'$ k。名字'已经是'string'类型了:) –

回答

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) 
} 
+0

非常好,非常感谢。我在想,如果你有任何参考文献,我可以阅读@ {...},它是否表示格式化的字符串? – NoChance

+1

是的:),阅读https://technet.microsoft.com/en-us/library/ff730948.aspx – Esperento57

+0

再次感谢您的帮助,我仍然在学习这个东西......还有其他10个东西...... ! – NoChance

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会所有,但前两个数组...

+0

试试我的第二个例子......,做你要求的更好的工作。 –

+0

是的,这是正确的 - 非常感谢。 – NoChance