Sort-Object игнорирует замещенный переключатель - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь адаптировать порядок сортировки Sort-Object к ситуации.Тем не менее, кажется, что моя переменная игнорируется как переключатель порядка сортировки -Descending

Следующий код показывает мою проблему: я также пробовал некоторые варианты фактической замены, например, $ ($ SortOrder), но ненашел комбинацию, которая работает.

$dlist = ("Zeta", "Beta", "Foo", "Alpha","Yada" )  
$sorted1 = $dlist | Sort-Object -Descending  
Write-Host $sorted1  
$sortOrder = "-Descending"  
$sorted2 = $dlist | Sort-Object $sortOrder  
Write-Host $sorted2 

Это приводит к следующим двум строкам: первая сортируется, вторая - не

Zeta Yada Foo Beta Alpha  
Zeta Beta Foo Alpha Yada

Что я не могу сделать?

1 Ответ

2 голосов
/ 19 сентября 2019

Для программного управления направлением сортировки используйте переменную [bool] и передайте ее переключателю -Descending;$true сортирует в порядке убывания, $false в порядке возрастания:

$descending = $true # Setting this to $false will sort in ascending order.
'Zeta', 'Beta', 'Foo', 'Alpha', 'Yada' | Sort-Object -Descending:$descending

Обратите внимание, что : вместо обычного пробела необходимо использовать для отделения имени параметра от значения в этом случае (этосинтаксис обычно поддерживается, но редко используется). [1]


В качестве альтернативы используйте splatting :

$params = @{ Descending = $true }
'Zeta', 'Beta', 'Foo', 'Alpha', 'Yada' | Sort-Object @params

Обе команды дают желаемый (нисходящий) порядок:

Zeta
Yada
Foo
Beta
Alpha

Что касается того, что вы пытались :

Вы не можете передать параметр переключателя, напримеркак -Descending, как строка (переменная).

Если вы это сделаете, Sort-Object будет считать его позиционным аргументом , который связывается с -Propertyпараметр, указывающий, какое свойство / свойства входных объектов сортировать.

Если такого свойства не существует, все входные объекты сравниваются одинаково (для всех сравнивается значение $null) без гарантированного порядка вывода.


[1] : безусловно сообщает PowerShell, что следующим токеном является аргумент для этого параметра .Если бы использовались пробелы, PowerShell считал бы следующий токен отдельным позиционным аргументом , учитывая, что параметры переключателя обычно не принимают аргументов (простое наличие параметра переключателя подразумевает что его значение равно $true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...