感谢您在这方面的帮助,我想我已经把下面的内容复杂化了,但逻辑并没有回应我的想法。
问题逻辑:
$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"
}
我希望 If 语句在 $a 和 $b 与 $c 和 $d 不同时运行,如果它们相同,请参见下文,我希望它输出值相同
$a = "One"
$b = "One"
$c = "One"
$d = "One"
提前致谢!
最佳答案
您可以使用Compare-Object
将值对作为数组进行比较:
if (Compare-Object $a, $b $c, $d -SyncWindow 0) {
'different'
} else {
'same'
}
请注意,这很方便,但相对较慢,这在具有多次迭代的循环中可能很重要。
Compare-Object
cmdlet比较两个数组并默认返回有关它们差异的信息。-SyncWindow 0
只比较直接对应的数组元素;换句话说:$a
必须等于$c
,而$b
必须等于$d
;如果没有-SyncWindow
,数组元素将以任意顺序进行比较,例如1, 2
将被视为等于2, 1
。使用
Compare-Object
调用的结果作为条件隐式地将结果强制转换为 bool 值,以及任何 非空 结果 - 表明至少存在 1差异 - 将评估为$True
。
至于你尝试了什么:
在您的条件中使用 { ... }
是不合适的。
{ ... }
中包含的表达式是脚本 block - 您可以稍后执行的代码片段,例如 &
或 。
即使您使用 (...)
来阐明运算符优先级(-ne
的优先级高于 -and
),但是您的条件不会按预期工作:
($a -and $b) -ne ($c -and $d)
将所有变量视为 bool 值;实际上,鉴于 PowerShell 的隐式 bool 转换,您正在比较一个值对是否至少有一个空字符串与另一个值对是否没有。
关于powershell - PowerShell 中 If 语句的多变量条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49726958/