0

下面检查是否存在注册表项并根据“TRUE”的结果如何让脚本捕获并处理它?

示例 -$testpath1将永远存在。然而$testpath2, $testpath3$testpath4可能并不总是存在。因此,脚本应该只处理 testpath1,因为它返回为真。

但是,如果$testpath2并且$testpath3存在,那么脚本应该处理到$testpath3并忽略$testpath4

我有以下内容,但问题是一旦确定第一个语句为真,它只处理那个语句并绕过所有其他语句。我真的希望脚本遍历每个语句和包含错误的语句,然后忽略该语句并处理它之前的语句。我猜 IF ELSE 不适用于这样的事情——那我应该用什么?

这是代码,下面的结果是:

结果: 1 is true

然而$testpath1$testpath2存在...

$CommunityName = Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration | ForEach-Object {Get-ItemProperty $_.pspath} | where-object {$_.PSChildName } | Foreach-Object {$_.PSChildName}

$testpath1 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 1) -ne $null 2>$null
$testpath2 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 2) -ne $null 2>$null
$testpath3 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 3) -ne $null 2>$null
$testpath4 = (Get-ItemProperty hklm:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\$CommunityName -Name 4) -ne $null 2>$null

if ($testpath1 -eq 'TRUE')
{
Write-Host "1 is true"
}
elseif ($testpath1 -eq 'TRUE' -and $testpath2 -eq 'TRUE')
{
Write-Host "1 and 2 is true"
}
elseif ($testpath1 -eq 'TRUE' -and $testpath2 -eq 'TRUE' -and $testpath3 -eq 'TRUE')
{
Write-Host "1 and 2 and 3 are true"
}
elseif ($testpath1 -eq 'TRUE' -and $testpath2 -eq 'TRUE' -and $testpath3 -eq 'TRUE' -and $testpath4 -eq 'TRUE')
{
Write-Host "1 and 2 and 3 and 4 are true"
}
4

1 回答 1

1

像这样的东西可以取决于您的需求:

 $a = $testpath1, $testpath2 , $testpath3 , $testpath4 # convert your true/false results in an array
$s = "" # empty string
$i = 1 # a simple variable as index
foreach ($b in $a)
 {
   if ($b -ne $true ) 
   { 
     break
   } 

   $s += "$i " # if true add index in string
   $i++
}

"$($s)is/are true" #output the result
于 2013-01-14T11:30:40.207 回答