将数组变量与可能值列表进行比较
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
我需要将数组中的值与可能结果列表进行比较,然后 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