在Powershell中返回Yes或No而不是True或False

时间:2018-05-28 20:46:26

标签: powershell

这是关于Powershell Script。

我想在整个脚本中将输出显示为Yes或No而不是True或False,只要它返回True或False。 (不使用if和else)。

例如,如果用户的密码已过期,则应显示“是”而不是“真”,反之亦然。

我正在编写一个代码(GUI表单),其中有许多输出(布尔值为True和False)。

为了使用户友好,我希望在有布尔输出的地方返回Yes或No而不是True或False。

3 个答案:

答案 0 :(得分:2)

如果您通常希望将脚本/ cmdlet /函数的布尔输出映射到'Yes''No',则可以使用以下内容:

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

E.g:

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

这利用了索引([ ])将其参数强制为整数[int])和 Boolean 这一事实(通过将[bool]映射到$False并将0映射到$True1)被强制为整数。

请注意,如果命令((...))返回无法强制转换为整数的内容,则返回$null作为整体结果(例如,尝试(1, 2)['not-a-number'])。

强制任何输出,无论其类型如何,都是布尔值,因此要求01(在手边的情况下映射到{{} 1}}或'No'),强制转换为'Yes'

[bool]

这会将('No', 'Yes')[[bool] (...)] $False输出(空字符串,0,空集合,...)映射到{{1} }以及其他所有内容(包括$null)到'No'

答案 1 :(得分:2)

mklement0's helpful answer上构建,您可以构造一个过滤器,用字符串“是”或“否”替换管道中的布尔值:

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

答案 2 :(得分:0)

您没有显示您尝试过或正在使用的任何代码。 所以,请发布你的内容,以便我们有一个参考点。

另外,你是否反对使用if / Then并输出Yes / No,如果它能得到你想要显示的内容?

如果您使用的cmdlet只输出布尔值true / false,则必须处理它,使用If / Then或case / select或try / catch语句。

您也可以根据您正在使用/使用的内容,对这些真/假项使用-replace选项。

然而,再一次,没有你展示任何东西,这一切都在猜测。