2012-07-30 111 views
5

我正在将一些旧的VB脚本转换为Powershell。我正在尝试使用Switch语句来设置多个变量。这可能在Powershell中吗?在VBS我的代码看起来是这样的:Powershell Switch语句设置多个变量

Select Case ENV 
    Case "DEV" 
     : SRCDRV = "\\Server1" _ 
     : DESTDRV = "\\Server1\Folder1\" 

    Case "TEST" 
     : SRCDRV = "F:" _ 
     : DESTDRV = "\\Server1\Folder2\" 

    Case "PROD" 
     : SRCDRV = "F:" _ 
     : DESTDRV = "\\Server2\Folder2\" 
End Select 

我曾尝试在PS类似的东西,但它似乎并没有设置的变量。

switch ($cENV) { 
    DEV { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder1\" 
     break  
    } 
    TEST { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder2\" 
     break 
    } 
    PROD { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder2\" 
     break 
    } 
} 

当我检查或者DESTDRV或SRCDRV的价值我得到一个错误说:变量“$ SRCDRV”,因为它尚未设置无法检索。关于我在做什么的任何想法都是错误的?

回答

4

您是先设置$ cENV吗?

我运行的确切上面的脚本是这样的:

$cENV = "DEV" 
switch ($cENV) { 
    DEV { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder1\" 
    } 
    TEST { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder2\" 
    } 
    PROD { 
     $SRCDRV = "\\Server1" 
     $DSTDRV = "\\Server2\Folder2\" 
    } 
} 
$SRCDRV 

而且它的返回

\\Server1 
+0

$ cENV可能有一定的价值,否则他会得到一个错误消息,$ cENV不能检索。 – dugas 2012-07-30 19:49:59

+0

谢谢,你是对的,如果我将$ cENV设置为“DEV”,它会返回正确的值。我不认为要专门设置它。 $ cENV变量由一个决定脚本文件位置的函数设置。如果我把开关,“DEV”,“TEST”和“PROD”放在引号中,它就像冠军一样。非常感谢您的帮助! – mack 2012-07-30 20:57:31

9

您的代码在找到交换机的案例时起作用。 $ cENV的值可能与“DEV”,“TEST”或“PROD”不匹配。添加默认开关盒,并在没有匹配时执行某些操作,例如:

switch ($cENV) { 
    DEV { 
    $SRCDRV = "\\Server1" 
    $DSTDRV = "\\Server2\Folder1\" 
    break  
    } 
    TEST { 
    $SRCDRV = "\\Server1" 
    $DSTDRV = "\\Server2\Folder2\" 
    break 
    } 
    PROD { 
    $SRCDRV = "\\Server1" 
    $DSTDRV = "\\Server2\Folder2\" 
    break 
    } 
    default { 
    throw "No matching environment for `$cENV: $cENV" 
    } 
}