我有一个测试结果对象,其中包含如下结果。
$TestScenarioResult = [pscustomobject]@{
Test1Result = $true
Test2Result = $true
Test3Result = $true
}
if($TestScenarioResult -match $false)
{
"Test Scenario is failed"
}
else
{
"Test Scenario is Succeeded"
}
我正在使用匹配比较运算符来检查是否有任何测试结果失败。如果是这样则失败,否则为真。虽然它有效,但它是一种正确的比较方式还是其他任何正确的方式?
答案 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"
}
}