2013-03-18 2 views
2

Я новичок в PowerShell и просто пытаюсь выяснить, как это работает.Вызов Sort-Object без трубы в 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

1

Это будет работать:

Get-ChildItem C:\ | 
Sort-Object Length 

Или для вас пример, это будет работать слишком;

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

Вы также можете использовать обратный тик как символ продолжения линии.

+0

Я бы сказал, что он должен использовать 'обратные одиночные кавычки, потому что некоторые командлеты не будет работать без него, по крайней мере, не последовательно, и это делает его более удобным для чтения. –

2

Необходимо указать параметр -InputObject. Без него $ child_items будет связываться с первым позиционным параметром, который является «Property»

Sort-Object -InputObject $child_items Length 

UPDATE

Я не вынимая мой ответ причин есть комментарии, присоединенные к нему. Я ошибался, результаты Get-ChildItem сортируются по умолчанию, и я пришел к выводу, что передача массива в InputObject выполняет эту работу. Очевидно, я был неправ, проверьте @ C.B ответ.

+0

Хотя сценарий работает с этим, объекты больше не сортируются. Почему это? –

+1

@SebastianKrysmanski Что вы делаете с результатом 'Sort-Object'? Помните, что он не сортируется. – Richard

+0

Я просто хочу записать его результат на консоль (чтобы он соответствовал выходному каналу альтернативы). –

Смежные вопросы