Powershell Switch - 多个子句

时间:2017-08-22 12:17:34

标签: powershell switch-statement

我正在创建一个脚本,根据条件更新Excel电子表格。

这就是我目前所拥有的:

if ($endIRs -ne $null) {
$endIRs | ForEach-Object {
    try {
        $classification = $_.Classification
        $priority = $_.Priority
        $title = $_.Title 
        $id = $_.Id

        switch ($classification) {
            {($_ -eq 'Reports') -and ($priority -eq '1')} {
            $GeAppsReportSheet.Cells.Item(8,2).Interior.ColorIndex = 3
            $GeAppsReportSheet.Cells.Item(8,2) = 'RED'
            }
            #more switch statements to go here
        }
     catch {#catch tickets with $classification not listed}
    }
}

一开始$endIRs包含过去12小时内记录的一系列高优先级“事件”。如果没有,那么一切都将是“绿色”,默认设置。

我想用switch语句实现的是if (($classification -eq 'Reports') -and ($priority -eq '1')) {'change the cell colour and text'},我可以自己做,但我需要它来检查优先级是“1”还是“2”并且做与电子表格中的“报告”分类单元格不同的内容。

你能在if声明中做一个switch声明,还是有更好的方法来做?

1 个答案:

答案 0 :(得分:2)

您可以使用$true作为switch条件,并将检查作为脚本块值进行处理:

switch ($true) {
    {($classification -eq 'Reports') -and ($priority -eq '1')} {
        ...
    }
    # ...
    # more switch statements to go here
    # ...
    default {
        ...
    }
}
但是,我从未真正喜欢过这种方法。对我来说,总是看起来像一个丑陋的黑客。我更喜欢if..elseif..else控件结构:

if ($classification -eq 'Reports' -and $priority -eq '1') {
    ...
} elseif (...) {
    ...
} elseif (...) {
    ...
} else {
    ...
}

编辑:当然,您还可以使用“常规”switch语句并在动作脚本块中嵌套其他条件:

switch ($classification) {
    'Reports' {
        if ($priority -eq '1') {
            ...
        } elseif ($priority -eq '2') {
            ...
        }
    }
    # ...
    # more switch statements to go here
    # ...
    default {
        ...
    }
}