“匹配”是否是比较对象值的正确运算符?

时间:2018-03-28 11:30:42

标签: powershell powershell-v3.0

我有一个测试结果对象,其中包含如下结果。

$TestScenarioResult = [pscustomobject]@{

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

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

我正在使用匹配比较运算符来检查是否有任何测试结果失败。如果是这样则失败,否则为真。虽然它有效,但它是一种正确的比较方式还是其他任何正确的方式?

2 个答案:

答案 0 :(得分:1)

这与其他答案类似,但您可以使用隐藏的.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过滤器,仅评估名为Test[any number]Result的过滤器,然后检查3个结果:true,false或者既不是true也不是false。

答案 1 :(得分:0)

这可能是一种更好的方法。它还会告诉您哪些结果是真或假。

如果没有比较运算符,

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