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

问题描述 投票:0回答:3

这是关于Powershell脚本的。

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

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

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

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

powershell
3个回答
2
投票

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

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

Ef。:

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'])。

要强制任何输出,无论其类型如何,都是布尔值,因此要对01(在手边映射到'No''Yes')进行索引,强制转换为[bool]

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

这会将$False0或空输出(空字符串,$null,空集合......)映射到'No',以及其他所有内容(包括$True)到'Yes'


2
投票

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

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
投票

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

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

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

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

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.