这是关于Powershell Script。
我想在整个脚本中将输出显示为Yes或No而不是True或False,只要它返回True或False。 (不使用if和else)。
例如,如果用户的密码已过期,则应显示“是”而不是“真”,反之亦然。
我正在编写一个代码(GUI表单),其中有许多输出(布尔值为True和False)。
为了使用户友好,我希望在有布尔输出的地方返回Yes或No而不是True或False。
答案 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
映射到$True
,1
)被强制为整数。
请注意,如果命令((...)
)返回无法强制转换为整数的内容,则返回$null
作为整体结果(例如,尝试(1, 2)['not-a-number']
)。
强制任何输出,无论其类型如何,都是布尔值,因此要求0
或1
(在手边的情况下映射到{{} 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选项。
然而,再一次,没有你展示任何东西,这一切都在猜测。