Powershell Switch语句设置多个变量
问题描述:
我正在将一些旧的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”,因为它尚未设置无法检索。关于我在做什么的任何想法都是错误的?
答
您是先设置$ 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
答
您的代码在找到交换机的案例时起作用。 $ 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"
}
}
$ cENV可能有一定的价值,否则他会得到一个错误消息,$ cENV不能检索。 – dugas 2012-07-30 19:49:59
谢谢,你是对的,如果我将$ cENV设置为“DEV”,它会返回正确的值。我不认为要专门设置它。 $ cENV变量由一个决定脚本文件位置的函数设置。如果我把开关,“DEV”,“TEST”和“PROD”放在引号中,它就像冠军一样。非常感谢您的帮助! – mack 2012-07-30 20:57:31