2012-07-30 17 views
5

Jestem w trakcie konwersji starego skryptu VB do Powershell. Próbuję użyć instrukcji Switch do ustawienia wielu zmiennych. Czy to możliwe w Powershell? W VBS mój kod będzie wyglądać następująco:Powershell Przełącz oświadczenie, aby ustawić wiele zmiennych

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 

Próbowałem coś podobnego w PS, ale nie wydaje się, aby ustawić zmienne.

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

Kiedy sprawdzić wartość obu DESTDRV lub SRCDRV pojawia się błąd mówiąc: Zmienna „$ SRCDRV” nie może zostać odzyskane, ponieważ nie został ustawiony. Jakieś pomysły na temat tego, co robię źle?

Odpowiedz

4

Czy ustawienie $ cENV pierwszy?

biegnę że dokładny scenariusz powyżej tak:

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

I to wraca

\\Server1 
+0

$ cENV prawdopodobnie ma jakąś wartość, w przeciwnym razie będzie on wyświetlany jest komunikat o błędzie $ cENV może nie być odzyskane. – dugas

+0

Dzięki, masz rację, jeśli ustawię $ cENV na "DEV", to zwróci poprawną wartość. Nie sądziłem, żebym spróbował ustawić to specjalnie. Zmienna $ cENV jest ustawiana przez funkcję, która określa położenie pliku skryptu. Jeśli umieściłem przełączniki, "DEV", "TEST" i "PROD", w cudzysłowie, działa jak mistrz. Bardzo dziękuję za pomoc! – mack

9

Twój kod działa, gdy zostanie znaleziony przypadek przełącznika. $ cENV prawdopodobnie ma wartość, która nie pasuje do "DEV", "TEST" lub "PROD". Dodaj przypadek domyślny przełącznika i coś zrobić, kiedy nie ma meczu, przykład:

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" 
    } 
} 
Powiązane problemy