Верните Да или Нет вместо Истина или Ложь в Powershell - PullRequest
0 голосов
/ 28 мая 2018

Это касается скрипта Powershell.

Я хочу показать вывод Да или Нет вместо Истина или Ложь во всем скрипте, где бы он ни возвращал Истину или Ложь.(без использования if и else).

Например, если срок действия пароля пользователя истек, вместо «True» должно отображаться «Да», и наоборот.

Я пишукод (форма GUI), в котором есть много выходов (в логическом True и False).

Чтобы сделать его удобным для пользователя, я хочу вернуть Yes или No вместо True или False, где есть логический вывод.

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Если вы обычно хотите отобразить логический вывод скрипта / командлета / функции на 'Yes' или 'No', вы можете использовать что-то вроде следующего:

('No', 'Yes')[(...)] # map output of ... to 'Yes', if $True, to 'No' otherwise

Например:

PS> ('No', 'Yes')[((Get-Date).DayOfWeek -eq 'Monday')]
Yes # on 2018-05-28

Здесь используется тот факт, что индексирование ([ ]) приводит к аргументу целое число ([int]) и логическое значение ([bool])) переводится в целое число путем сопоставления $False с 0 и $True с 1.

Обратите внимание, что если команда ((...)) возвращает что-то, что не может быть приведено к целому числу,$null возвращается как общий результат (например, (1, 2)['not-a-number']).

Для принудительного любого вывода , независимо от его типа, в логическое значение и, следовательно, в любой индекс 0 или 1 (который в данном случае соответствует 'No' или 'Yes'), приведен к [bool]:

('No', 'Yes')[[bool] (...)]

, который отобразит $False, 0,или пустой вывод (пустая строка, $null, пустые коллекции, ...) в 'No', а все остальное (включая $True) в 'Yes'.

0 голосов
/ 29 мая 2018

Опираясь на полезный ответ mklement0 , вы можете создать фильтр, который заменяет логические значения в конвейере строкой "Да" или "Нет":

filter BoolToYesNo {
  if($_ -is [bool]){
    $_ = @('No','Yes')[$_]
  }
  return $_
}

Затем вставьте егов конце вашего конвейера:

PS C:\> .\myscript.ps1
True
False
Something else completely
True

PS C:\> .\myscript.ps1 |BoolToYesNo
Yes
No
Something else completely
Yes
0 голосов
/ 29 мая 2018

Вы не показываете код, который вы пытались / или работаете с.Итак, пожалуйста, опубликуйте то, что у вас есть, чтобы у нас была точка отсчета.

Кроме того, что вы противопоставляете использованию if / Then и выводу Yes / No, если вы получаете то, что вы хотите отобразить?

Если вы используете командлеты, которые выводят только логическое значение true / false, вы должны с этим справиться, либо используйте оператор If / Then, либо case / select или try / catch.

Вы также можете,просто используйте параметр -replace для этих истинных / ложных элементов в зависимости от того, что вы делаете / используете.

И все же, опять же, когда ты ничего не показываешь, сейчас все догадываются.

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