2009-04-10 16 views
5

¿Es posible asignar el resultado de una instrucción switch a una variable?Powershell v1: ¿Es posible asignar el resultado de una instrucción switch a una variable?

Por ejemplo, en lugar de:

switch ($Extension) 
    { 
     doc {$Location = "C:\Users\username\Documents\"; break} 
     exe {$Location = "C:\Users\username\Downloads\"; break} 
     default {$Location = "C:\Users\username\Desktop\"} 
    } 

¿Es posible hacer algo similar a:

$Location = 
{ 
    switch ($Extension) 
    { 
     doc {"C:\Users\username\Documents\"; break} 
     exe {"C:\Users\username\Downloads\"; break} 
     default {"C:\Users\username\Desktop\"} 
    } 
} 

Tratando los resultados anteriores en $ ubicación que contiene el bloque de código como una cadena.

Respuesta

7

Para V1, me gustaría envolver la declaración del interruptor en una función.

function Get-DocumentLocation($Extension) 
{ 
    switch ($Extension) 
    { 
     doc {"C:\Users\username\Documents\"; break} 
     exe {"C:\Users\username\Downloads\"; break} 
     default {"C:\Users\username\Desktop\"} 
    } 
} 

$Location = Get-DocumentLocation $extension 
+0

Además, el código original obtiene una cadena del código porque usted crea un ScriptBlock ({switch() ...}), pero no lo invoca: & {switch() ...} – JasonMArcher

2

¿El siguiente trabajo?

$Location = (switch ($Extension) { 
       doc {"C:\Users\username\Documents\"; break} 
       exe {"C:\Users\username\Downloads\"; break} 
       default {"C:\Users\username\Desktop\"} 
      }) 

O tal

$Location = $(switch ($Extension) { 
       doc {"C:\Users\username\Documents\"; break} 
       exe {"C:\Users\username\Downloads\"; break} 
       default {"C:\Users\username\Desktop\"} 
      }) 

No tienen v1 aquí para probar, en este momento, pero creo que podría funcionar.

+0

Aren ' ¿Tus dos opciones son las mismas? –

+0

Ya no, gracias :) – Joey

Cuestiones relacionadas