2013-03-18 42 views
2

我是PowerShell的新手,我只是想弄明白它是如何工作的。在PowerShell中調用沒有管道的排序對象

所以,我怎麼可以這樣寫代碼:

Get-ChildItem C:\ | Sort-Object Length 

多內襯代碼?我試過這個:

$child_items = Get-ChildItem C:\ 
Sort-Object $child_items Length 

但它沒有工作。我越來越:

Sort-Object : A positional parameter cannot be found that accepts argument 'Length'. 

回答

5

雖然其他的答案是使用命名參數還記得get-help Sort-Object說來傳遞價值的正確方法:

When you use the InputObject parameter to submit a collection of items, 
Sort-Object receives one object that represents the collection. 
Because one object cannot be sorted, Sort-Object returns the entire collection unchanged. 

你會發現,沒有排序操作將完成傳遞$ child_items到-inputobject

你總是需要用管道傳遞價值-inputobject

+3

...如果你不喜歡它,你可以投票了這個連接項目:http://connect.microsoft.com/PowerShell/feedback/details/568524/sort-object-does-not-sort-items-在的集合,傳入-透inputobject參數 – BartekB 2013-03-18 11:22:27

1

這會工作:

Get-ChildItem C:\ | 
Sort-Object Length 

或您例如這會工作過;

$child_items = Get-ChildItem C:\ 
$child_items | Sort-Object Length 

您也可以使用返回刻度作爲續行字符。

+0

我會說他應該使用反引號',因爲某些cmdlet不會在未運行它,至少不會持續,這使得它更具可讀性。 – 2013-03-18 11:43:44

2

您需要指定-InputObject參數。沒有它,$ child_items將結合到第一位置參數,這是「財產」

Sort-Object -InputObject $child_items Length 

UPDATE

我不會刪除我的答案原因有連接到它的意見。我錯了,Get-ChildItem的結果默認是排序的,我得出結論:將數組傳遞給InputObject可以完成這項工作。很明顯,我錯了,檢查@ C.B的答案。

+0

雖然腳本與此一起運行,但對象不再排序。爲什麼? – 2013-03-18 10:27:30

+1

@SebastianKrysmanski你在用'Sort-Object'的方式做什麼?請記住,它沒有排序。 – Richard 2013-03-18 10:29:01

+0

我只想將其結果寫入控制檯(以便它與管道替代的輸出相匹配)。 – 2013-03-18 10:32:17

相關問題