Lac*_*ite 3 powershell logic if-statement
感谢您的帮助,我认为我已经过度复杂了下面的内容,但逻辑并没有回应我的思想是如何告诉它的.
问题逻辑:
$a = "One"
$b = "Two"
$c = "Three"
$d = "Four"
If( {$a -and $b} -ne {$c and $d} ) {
Write-Host "Values are Different"
} Else {
Write-Host "values are the same"
}
Run Code Online (Sandbox Code Playgroud)
我希望当$ a和$ b与$ c和$ d不同时运行If语句,如果相同,请参见下文,我希望它输出值相同
$a = "One"
$b = "One"
$c = "One"
$d = "One"
Run Code Online (Sandbox Code Playgroud)
提前致谢!
您可以使用Compare-Object比较值对作为数组:
if (Compare-Object $a, $b $c, $d -SyncWindow 0) {
'different'
} else {
'same'
}
Run Code Online (Sandbox Code Playgroud)
请注意,这很方便,但相对较慢,这在具有多次迭代的循环中可能很重要.
该Compare-Objectcmdlet的比较两个阵列,默认情况下返回有关其差异的信息.
-SyncWindow 0只比较直接对应的数组元素; 换句话说:$a必须平等$c,$b必须平等$d; 没有-SyncWindow,数组元素将以任何顺序进行比较,以便例如1, 2被认为是相等的2, 1.
使用Compare-Object调用的结果作为条件隐式地将结果强制转换为布尔值,并且任何非空结果 - 指示存在至少1个差异 - 将评估为$True.
至于你试过的:
使用{ ... }你的条件是不恰当的.
附带的表达式{ ... }是脚本块 - 您可以在以后执行的代码段,例如with &或.
即使您使用(...)了澄清运算符优先级(-ne优先级高于-and),您的条件也不会按预期工作:
($a -and $b) -ne ($c -and $d)将所有变量视为布尔值 ; 实际上,给定PowerShell的隐式to-Boolean转换,您要比较一个值对是否至少有一个空字符串,而另一个值是否相反.| 归档时间: |
|
| 查看次数: |
3839 次 |
| 最近记录: |