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 ケースを追加し、一致しない場合に何かを行います。例:

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 に答える