2012-07-30 18 views
5

Sono in procinto di convertire alcuni vecchi script VB in PowerShell. Sto cercando di utilizzare un'istruzione Switch per impostare più variabili. È possibile in Powershell? In VBS mio codice sarebbe simile a questa:Istruzione switch Powershell per impostare più variabili

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 

ho provato qualcosa di simile in PS, ma non sembra per impostare le variabili.

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

Quando controllo il valore di una DESTDRV o SRCDRV ottengo un errore che dice: La variabile '$ SRCDRV' non possono essere recuperate, perché non è stato impostato. Qualche idea su cosa sto facendo male?

risposta

4

Stai mettendo $ Cenv prima?

sto correndo quel copione esatta in questo modo:

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

Ed è tornando

\\Server1 
+0

$ Cenv probabilmente ha un certo valore, altrimenti sarebbe un messaggio di errore che $ Cenv non può essere recuperate. – dugas

+0

Grazie, hai ragione, se imposto $ cENV su "DEV" restituisce il valore corretto. Non ho pensato di provare a specificarlo. La variabile $ cENV viene impostata da una funzione che determina la posizione del file di script. Se metto gli interruttori, "DEV", "TEST" e "PROD", tra virgolette, funziona come un campione. Grazie mille per il tuo aiuto! – mack

9

Il codice funziona quando viene rilevato un caso per lo switch. $ cENV probabilmente ha un valore che non corrisponde a "DEV", "TEST" o "PROD". Aggiungere un caso interruttore di default e fare qualcosa quando non si dispone di una corrispondenza, ad esempio:

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