PowerShell Where-Object - 如何对条件进行分组
PowerShell Where-Object - How to group conditions
我有一个 PowerShell 脚本,其中包含一个通过管道传输到 "where-object" 的变量。此 where 子句包含多个必须为真 (-AND) 的语句和两个语句,其中至少一个必须为真 (-XOR)。我如何对它们进行分组?到目前为止我没有尝试过:
$var | Where-Object { condition1 -AND condition2 -AND condition3 -XOR condition4 }
$var | Where-Object { condition1 -AND condition2 -AND (condition3 -XOR condition4) }
$var | Where-Object { (condition1 -AND condition2) -AND condition3 -XOR condition4 }
$var | Where-Object { (condition1 -AND condition2) -AND (condition3 -XOR condition4) }
你能帮帮我吗?
提前致谢!
你试过这个吗:
$var | Where-Object { condition1 -AND condition2 -AND (condition3 -OR condition4) }
附带提醒一下,这里是您可能感兴趣的Microsoft official man page:
-or Logical or. TRUE when either (1 -eq 1) -or (1 -eq 2)
or both statements are TRUE. True
-xor Logical exclusive or. TRUE (1 -eq 1) -xor (2 -eq 2)
only when one of the statements False
is TRUE and the other is FALSE.
既然我来了,还有一个问题:
根据 $var 对象的大小和结构,检查所有对象的所有条件可能需要一些时间,您应该对其进行过滤:
提醒:? 是 Where-Object 的自然别名:
$var | ? { condition1 } |? { condition2 } |? { condition3 -OR condition4 }
这可能会帮助您的脚本运行得更快...
感谢您提供所有检查条件结果的建议和可能性。最后我使用了一个稍微不同的解决方案:
if ( $var | Where-Object { condition1 -AND condition2 -AND condition3 } ) {
Write-Host "Do some stuff"
}
else {
if ( $var | Where-Object { condition1 -AND condition2 -AND condition4 } ) {
Write-Host "Do other stuff"
}
}
我有一个 PowerShell 脚本,其中包含一个通过管道传输到 "where-object" 的变量。此 where 子句包含多个必须为真 (-AND) 的语句和两个语句,其中至少一个必须为真 (-XOR)。我如何对它们进行分组?到目前为止我没有尝试过:
$var | Where-Object { condition1 -AND condition2 -AND condition3 -XOR condition4 }
$var | Where-Object { condition1 -AND condition2 -AND (condition3 -XOR condition4) }
$var | Where-Object { (condition1 -AND condition2) -AND condition3 -XOR condition4 }
$var | Where-Object { (condition1 -AND condition2) -AND (condition3 -XOR condition4) }
你能帮帮我吗?
提前致谢!
你试过这个吗:
$var | Where-Object { condition1 -AND condition2 -AND (condition3 -OR condition4) }
附带提醒一下,这里是您可能感兴趣的Microsoft official man page:
-or Logical or. TRUE when either (1 -eq 1) -or (1 -eq 2)
or both statements are TRUE. True
-xor Logical exclusive or. TRUE (1 -eq 1) -xor (2 -eq 2)
only when one of the statements False
is TRUE and the other is FALSE.
既然我来了,还有一个问题: 根据 $var 对象的大小和结构,检查所有对象的所有条件可能需要一些时间,您应该对其进行过滤:
提醒:? 是 Where-Object 的自然别名:
$var | ? { condition1 } |? { condition2 } |? { condition3 -OR condition4 }
这可能会帮助您的脚本运行得更快...
感谢您提供所有检查条件结果的建议和可能性。最后我使用了一个稍微不同的解决方案:
if ( $var | Where-Object { condition1 -AND condition2 -AND condition3 } ) {
Write-Host "Do some stuff"
}
else {
if ( $var | Where-Object { condition1 -AND condition2 -AND condition4 } ) {
Write-Host "Do other stuff"
}
}