2013-03-18 37 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

相关问题