2016-10-02 93 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