Для программного управления направлением сортировки используйте переменную [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
).