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),那么它应该做您想要做的事情。然而,如果你想知道哪个特定的结果失败了,你仍然需要单独检查它们。这两个注释都可以构成答案。是的,我有点想在给出答案之前知道用例。