hash table / pscustomobject而不是switch block

时间:2016-10-18 17:07:03

标签: hashtable powershell-v3.0

有没有办法在下面使用哈希表或pscustomobject而不是switch block?哈希表似乎是简化函数的好方法。

function Get-Farm
{
[cmdletbinding()]
    param (
    [parameter (Mandatory = $true)]
    [string]$farm)

Process{
        switch($farm){
            A {
                $script:startHostID = 0
                $script:endHostID = 0
            }
            B {
                $script:startHostID = 1
                $script:endHostID = 12
            }
            C {
                $script:startHostID = 13
                $script:endHostID = 24
            }

            BC {
                $script:startHostID = 1
                $script:endHostID = 24
            }

            ALL {
                $script:startHostID = 1
                $script:endHostID =48
            }
 }
 }

1 个答案:

答案 0 :(得分:1)

实际上,散列表查找是更好的选择 在Begin块中创建查找表,并在Process中使用它 另外,请在参数说明中使用ValueFromPipeline,否则请勿使用Process

function Get-Farm
{
[cmdletbinding()]
param (
    [parameter(Mandatory, ValueFromPipeline)]
    [string]$farm
)
Begin {
    $lookup = @{
        A = 0,0
        B = 1,12
        C = 13,24
        BC = 1,24
        ALL = 1,48
    }
}
Process {
    if ($values = $lookup[$farm]) {
        $script:startHostID = $values[0]
        $script:endHostID = $values[1]
    }
}
}

我已经使用if()内的作业来压缩代码,但当然你可以单独编写代码:

$values = $lookup[$farm]
if ($values) {