2012-07-30 7 views
5

Ich bin in den Prozess zu Powershell einige alte VB-Skript zu konvertieren. Ich versuche, eine Switch-Anweisung zu verwenden, um mehrere Variablen festzulegen. Ist das in Powershell möglich? In VBS würde mein Code wie folgt aussehen:Powershell Switch-Anweisung setzen Mehrere Variablen

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 

ich etwas ähnliches in PS versucht, aber es scheint nicht, die Variablen zu setzen.

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

Wenn ich den Wert von entweder DESTDRV oder SRCDRV überprüfen erhalte ich eine Fehlermeldung, dass: die Variable ‚$ SRCDRV‘ kann nicht abgerufen werden, weil es nicht gesetzt wurde. Irgendwelche Ideen, was ich falsch mache?

Antwort

4

setzen Sie $ cenV zuerst?

Ich bin mit, dass genaue Skript oben wie folgt aus:

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

Und es Rückkehr

\\Server1 
+0

$ cenV wahrscheinlich einen gewissen Wert hat, sonst hätte er eine Fehlermeldung erhalten, die $ cenV nicht sein kann abgerufen. – dugas

+0

Danke, Sie haben Recht, wenn ich $ cenv auf "DEV" setze, wird der korrekte Wert zurückgegeben. Ich habe nicht daran gedacht, es speziell zu versuchen. Die Variable $ cENV wird von einer Funktion festgelegt, die den Speicherort der Skriptdatei bestimmt. Wenn ich die Schalter "DEV", "TEST" und "PROD" in Anführungszeichen setze, funktioniert es wie ein Champion. Vielen Dank für Ihre Hilfe! – mack

9

Ihr Code funktioniert, wenn ein Fall für den Switch gefunden wird. $ cENV hat wahrscheinlich einen Wert, der nicht mit "DEV", "TEST" oder "PROD" übereinstimmt. Fügen Sie ein Standard-Schaltergehäuse und etwas tun, wenn Sie nicht über ein Spiel, Beispiel haben:

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" 
    } 
}