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

Compare array variable with list of possible values

我需要将数组中的值与可能结果列表进行比较,然后 return 变量中的值取决于列表是否匹配。

即我有一个名为 $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",否则保留为 "Pass"。这样做的最终结果是将 Pass 或 Error 写入文本文件,然后使用我们的网络监控工具解析该文件并在发现错误时发出警报。

在您的条件中使用 -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'} 

}

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

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

因为 4$errors 不是 ,它 returns Pass

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

因为5$errors中是,所以returnsError