这是关于Powershell脚本的。
我想在整个脚本中将输出显示为Yes或No而不是True或False,只要它返回True或False。 (不使用if和else)。
例如,如果用户的密码已过期,则应显示“是”而不是“真”,反之亦然。
我正在编写一个代码(GUI表单),其中有许多输出(布尔值为True和False)。
为了使用户友好,我希望在有布尔输出的地方返回Yes或No而不是True或False。
如果您通常希望将脚本/ 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']
)。
要强制任何输出,无论其类型如何,都是布尔值,因此要对0
或1
(在手边映射到'No'
或'Yes'
)进行索引,强制转换为[bool]
:
('No', 'Yes')[[bool] (...)]
这会将$False
,0
或空输出(空字符串,$null
,空集合......)映射到'No'
,以及其他所有内容(包括$True
)到'Yes'
。
在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
您没有显示您尝试过或正在使用的任何代码。所以,请发布您所拥有的内容,以便我们提供参考。
另外,你是否反对使用if / Then并输出Yes / No,如果它能得到你想要显示的内容?
如果您使用的cmdlet只输出布尔值true / false,则必须处理它,使用If / Then或case / select或try / catch语句。
您也可以根据您正在使用/使用的内容,对这些真/假项使用-replace选项。
然而,再一次,没有你展示任何东西,这一切都在猜测。