6

我正在将一些旧的 VB 脚本转换为 Powershell。我正在尝试使用 Switch 语句来设置多个变量。这在 Powershell 中可行吗?在 VBS 中,我的代码如下所示:

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

2 回答 2

12

当找到开关的情况时,您的代码将起作用。$cENV 的值可能与“DEV”、“TEST”或“PROD”不匹配。添加一个默认的 switch case 并在没有匹配项时执行某些操作,例如:

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"
  }
}
于 2012-07-30T19:37:54.053 回答
10

你是先设置 $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
于 2012-07-30T19:38:16.597 回答