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"
        }
    }