2012-07-30 8 views
5

Estoy en el proceso de convertir algún script antiguo de VB a Powershell. Estoy tratando de usar una instrucción Switch para establecer múltiples variables. ¿Es esto posible en Powershell? En VBS mi código sería algo como esto:Declaración del conmutador Powershell para establecer múltiples variables

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 

He intentado algo similar en PS, pero no parece establecer las variables.

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

Cuando compruebo el valor de cualquiera de DESTDRV o SRCDRV me sale un error que dice: La variable no puede ser recuperada, ya que no se ha establecido '$ SRCDRV'. ¿Alguna idea sobre lo que estoy haciendo mal?

Respuesta

4

¿Usted está poniendo $ Cenv primero?

estoy corriendo ese guión exactamente por encima de la siguiente manera:

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

Y se está volviendo

\\Server1 
+0

$ Cenv probablemente tiene algún valor, de lo contrario se obtendría un mensaje de error $ Cenv no puede ser recuperado. – dugas

+0

Gracias, tienes razón, si configuro $ cENV en "DEV" devuelve el valor correcto. No pensé en intentar configurarlo específicamente. La variable $ cENV está siendo establecida por una función que determina la ubicación del archivo de script. Si pongo los interruptores, "DEV", "TEST" y "PROD", entre comillas, funciona como un campeón. ¡Muchas gracias por su ayuda! – mack

9

Su código funciona cuando se encuentra un caso para el cambio. $ cENV probablemente tiene un valor que no coincide con "DEV", "TEST" o "PROD". Añadir una caja de conmutación por defecto y hacer algo cuando usted no tiene un partido, ejemplo:

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