首页 > 解决方案 > 使用 If 语句设置变量,但如果不满足条件则不更改它?

问题描述

我正在尝试从 IF 语句设置输出变量,但仅在满足条件时才设置,但如果不满足条件,则保持变量不变。出于某种原因,即使不满足条件,IF 语句也会更改变量。如果条件失败,我如何告诉 IF 语句什么都不做?

我最初从 IF 语句开始,在它的脚本块中设置 $Output = "Error",但这只是将它设置为失败,即使它不应该。

$Output = "Pass"

$ErrorCodes = 2, 26, 50, 48, 2820, 4239
$ErroredBackups = Import-Csv C:\temp\NetBackupJobs_GS.csv

foreach ($ErroredBackup in $ErroredBackups) { 
    $Output = if ($ErroredBackup.status -in $ErrorCodes) { 
        "Error"
    }
}
$Output 

CSV 样本:

jobid,开始,状态 334382,17/07/2019 16:35,0

当它应该是“错误”或“通过”时,我一直将 $Output 设为空白

标签: powershellvariablesif-statement

解决方案


在块内移动赋值 ( $Output = ...) if

if ($ErroredBackup.status -in $ErrorCodes) { 
    $Output = "Error"
}

另一种可能更符合 PowerShell 习惯的方法是利用Where-Object查找“真正失败”的备份:

$ErrorCodes = 2, 26, 50, 48, 2820, 4239
$ErroredBackups = Import-Csv C:\temp\NetBackupJobs_GS.csv

if($ErroredBackups |Where-Object status -in $ErrorCodes){
    # At least one backup job must have had a terrible error code
    "Error"
}
else{
    # None found, pass
    "Pass"
}

推荐阅读