将数组变量与可能值列表进行比较

时间:2019-07-18 16:52:03

标签: powershell comparison operator-keyword

我需要将数组中的值与可能结果的列表进行比较,然后根据列表是否匹配,在变量中返回值。

即我有一个名为$ErroredBackup的数组,其列为“ status” 我需要将每个$ErroredBackup.Status与可能的数字列表进行比较,如果匹配,请将$ output变量设置为Error。如果不匹配,请将$output变量保留不变(我将其设置为Pass开头)

我尝试使用-contain,但这似乎是另一回事-比较具有单个值的数组,而不是将单个值与列表进行比较。

这适用于单个值:

$Output="Pass"
$ErroredBackups = Import-Csv C:\temp\NetBackupJobs_GS.csv
                    foreach ($ErroredBackup in $ErroredBackups) {If ($ErroredBackup.status -eq 26) {$Output="Error"}}

但是我需要一个值范围:

$Output="Pass"
$ErroredBackups = Import-Csv C:\temp\NetBackupJobs_GS.csv
                    foreach ($ErroredBackup in $ErroredBackups) {If ($ErroredBackup.status -eq 2,26,50,48,2820,4239) {$Output="Error"}}

我想要的是foreach循环遍历数组,如果它在.status列中找到任何列出的值,它将$output的值更改为“ Error” ,否则将其保留为“通过”。最终的结果是将“通过”或“错误”写入文本文件,然后使用我们的网络监视工具解析该文件,并在发现错误时发出警报。

2 个答案:

答案 0 :(得分:0)

根据情况使用-OR语句。

$ErroredBackups = Import-Csv "C:\temp\NetBackupJobs_GS.csv"

foreach ($ErroredBackup in $ErroredBackups.status) {
    If (@($ErroredBackup -eq "2" -OR $ErroredBackup -eq "26" -OR $ErroredBackup -eq "50" -OR $ErroredBackup -eq "48" -OR $ErroredBackup -eq "2820" -OR $ErroredBackup -eq "4239")) {
        $Output="Error"
        write-host $Output
    } else{
        $Output="Pass"
        write-host $Output
    }
}

-或-

您可以使用-match

$errorArr = "2","26","50","48","282","4239"

$ErroredBackups = Import-Csv "C:\temp\NetBackupJobs_GS.csv"

foreach ($ErroredBackup in $ErroredBackups.status) {
    if ($errorArr -match $ErroredBackup){$Output="Error"}else{$Output="Pass"}
    write-host $Output

}

-或-

使用compare-object,然后在SideIndicator上进行条件检查

$errorArr = "2","26","50","48","2820","4239"

$ErroredBackups = Import-Csv "C:\temp\NetBackupJobs_GS.csv"

foreach ($ErroredBackup in $ErroredBackups.status) {
    $Output = compare-object $errorArr $ErroredBackup 
    IF ($Output.SideIndicator -eq '=>'){write-host 'Pass'}else{write-host 'Error'} 

}

答案 1 :(得分:0)

正如Lee_Dailey所说,in运算符是您所需要的。下面是一个简化的示例

$errors = 1,2,3,5,6
$ErroredBackup = 4
if ($ErroredBackup -in $errors) { "Error" } else { "Pass" }

由于{{1}中的4不是,因此它将返回$errors

Pass

由于$errors = 1,2,3,5,6 $ErroredBackup = 5 if ($ErroredBackup -in $errors) { "Error" } else { "Pass" } 中的5 ,它将返回$errors