Microsoft Connect已经退役,但好消息是,对PowerShell(Core)语言中三元运算符的支持似乎正在进行中。
您可以使用PowerShell的本机方式:
"The condition is " + (&{If($Condition) {"True"} Else {"False"}}) + "."
但是,由于这在语法中添加了大量的括号和括号,您可以考虑使用以下cmdlet(可能是现有最小的cmdlet之一):
Function IIf($If, $Right, $Wrong) {If ($If) {$Right} Else {$Wrong}}
这将使您的命令简化为:
"The condition is " + (IIf $Condition "True" "False") + "."
Function IIf($If, $IfTrue, $IfFalse) {
If ($If) {If ($IfTrue -is "ScriptBlock") {&$IfTrue} Else {$IfTrue}}
Else {If ($IfFalse -is "ScriptBlock") {&$IfFalse} Else {$IfFalse}}
}
IIf $a {1/$a} NaN
"The multiplicative inverse of $a is $(IIf $a {1/$a} NaN)."
如果$a
的值不是零,则返回乘法逆;否则,它将返回nan
(其中未计算{1/$A}
)。
另一个很好的例子是,它将使一个安静的、模棱两可的语法变得简单得多(特别是在您希望将其内联的情况下),您希望在一个对象上运行一个方法,该对象可能是$null
。
执行此操作的本机“if
”方法如下所示:
If ($Object) {$a = $Object.Method()} Else {$a = $null}
$a = IIf $Object {$Object.Method()}
(请注意,如果$object
为$null
,则如果未提供$ifalse
值,则$a
将自动设置为$null
。)
2014-09-19新增:
对IIF
cmdlet进行少量更改,该cmdlet现在设置当前对象($_
或$psitem
):
Function IIf($If, $Then, $Else) {
If ($If -IsNot "Boolean") {$_ = $If}
If ($If) {If ($Then -is "ScriptBlock") {&$Then} Else {$Then}}
Else {If ($Else -is "ScriptBlock") {&$Else} Else {$Else}}
}
这方面的一般语法现在将是$A=IIf$Object{$_.method()}
。更常见的示例如下所示:
$VolatileEnvironment = Get-Item -ErrorAction SilentlyContinue "HKCU:\Volatile Environment"
$UserName = IIf $VolatileEnvironment {$_.GetValue("UserName")}
请注意,命令$VolateEnvironment.getValue(“username”)
通常会导致“您不能对空值表达式调用方法”。如果相关注册表(hkcu:\volatile environment
)不存在,则出错;其中命令iif$VolateEnvironment{$_.getValue(“username”)}
将只返回$null
。
如果$If
参数是条件(类似于$number-lt 5
)或强制为条件(使用[Bool]
类型),则IIF
cmdlet不会否决当前对象,例如:
$RegistryKeys | ForEach {
$UserName = IIf ($Number -lt 5) {$_.GetValue("UserName")}
}
或:
$RegistryKeys | ForEach {
$UserName = IIf [Bool]$VolatileEnvironment {$_.OtherMethod()}
}
新增2020-03-20:
使用三元运算符语法
PowerShell7.0引入了使用三元html" target="_blank">运算符的新语法。它遵循C#三元运算符语法:
三元运算符的行为类似于简化的if-else
语句。计算
表达式,并将结果转换为布尔值,以确定下一步应计算哪个分支:
"The multiplicative inverse of $a is $($a ? (& {1/$a}) : 'NaN')."
问题内容: 如何在JavaScript中使用内联语句?是否也有内联语句? 像这样: 问题答案: 您不一定需要jQuery。仅JavaScript就能做到这一点。 该变量将是如果该值,并且如果该值是。 这称为条件(三元)运算符。
类似这样的事情:
如果Django模型的字段与条件匹配,则将其指定给值。 在这种情况下我怎么什么都不做?如果条件通过,我们就不能做
我错过了什么?
我想使用PowerShell生成命令列表,将文件从一个位置移动到另一个位置。(我确信PowerSell确实可以移动,但我想先看看命令列表……是的,我知道)。 文件位于下一层的一系列子文件夹中,需要移动到另一台主机上相应的一系列子文件夹中。子文件夹具有8位标识符。我需要一系列命令,比如 该文件需要进入相应的8位标识符文件夹的\导入子目录。 下面的PowerShell将生成我需要的数据 但我一直在研究
问题内容: VS 哪种被认为是 正确的 (语法上)且性能最高的方法,为什么? 后一个示例中的语法对我来说似乎更合乎逻辑,但我的假设是JOIN会更快。 我看过查询计划,还无法从中解密任何内容。 查询计划1 查询计划2 问题答案: 两种语法有不同的用途。假设使用Join语法,则需要StockToCategory和Category表中的某些内容。如果每个类别的StockToCategory表中有多个条目