Powershell 是';匹配';用于比较对象值的正确运算符?

Powershell 是';匹配';用于比较对象值的正确运算符?,powershell,powershell-3.0,Powershell,Powershell 3.0,我有一个测试结果对象,它包含以下结果 $TestScenarioResult = [pscustomobject]@{ Test1Result = $true Test2Result = $true Test3Result = $true } if($TestScenarioResult -match $f

我有一个测试结果对象,它包含以下结果

$TestScenarioResult = [pscustomobject]@{

                        Test1Result = $true
                        Test2Result = $true
                        Test3Result = $true
                      }

if($TestScenarioResult -match $false)
{
     "Test Scenario is failed"
}
else
{
    "Test Scenario is Succeeded"
}

我使用匹配比较运算符检查是否有任何测试结果失败。如果是,则为fail,否则为true。虽然它是有效的,但它是一种正确的比较方法还是其他合适的方法?

这可能是一种更好的方法。它还会告诉你哪些结果是正确的或错误的

if
将在不使用比较运算符的情况下计算true或false

$HT =
@{

    Test1Result = $true
    Test2Result = $false
    Test3Result = $true
}

$TestScenarioResult = New-Object -TypeName PSCustomObject -Property $HT

$PropMem = $TestScenarioResult | Get-Member -MemberType Properties | select -ExpandProperty name

Foreach ($Prop in $PropMem)
{
    if($TestScenarioResult.$Prop)
    {
        "Test Scenario $Prop is Succeeded"
    }

    else
    {
        "Test Scenario $Prop is failed"
    }
}

这与另一个答案类似,但您可以使用隐藏的
.PSObject.Properties
默认属性来获取对象属性,然后使用循环检查每个结果:

$TestScenarioResult = [pscustomobject]@{
    Test1Result = $true
    Test2Result = $false
    Test3Result = 'someothervalue'
}

ForEach ($Result in ($TestScenarioResult.PSObject.Properties | Where-Object {$_.Name -Match '^Test\d.*Result'})) {
    if ($Result.Value -eq $True) {
        "$($Result.name) succeeded"
    }
    elseif ($Result.Value -eq $False){
        "$($Result.name) failed"
    }
    else{
        "$($Result.name) was unexpectedly $($Result.value)"
    }
}

我在属性中添加了一个
Where Object
过滤器,只计算那些名为
的测试[任何数字]结果
,然后检查3个结果:真、假或不真或假。

你的目标是什么?只是为了确定任何结果是否为false?这是因为
-match
对字符串进行操作,并且对象的字符串表示形式是
{Test1Result=True;Test2Result=True;Test3Result=True}
,而
$false
的字符串表示形式是
false
。它要么笨拙,要么优雅,这取决于你的观点,但它肯定不是完全直观的。事实上,只要任何值为$false,它就会匹配$false。同样,只要任何值为$true,它就会匹配$true。所以,如果您的唯一目标是检查每个值是否为$true(或者翻转它并检查每个值是否为$false),那么它应该做您想要做的事情。然而,如果你想知道哪个特定的结果失败了,你仍然需要单独检查它们。这两个注释都可以构成答案。是的,我有点想在给出答案之前知道用例。