2009-04-10 10 views
5

È possibile assegnare il risultato di un'istruzione switch a una variabile.Powershell v1: è possibile assegnare il risultato di un'istruzione switch a una variabile?

Per esempio, invece di:

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

E 'possibile fare qualcosa di simile a:

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

Cercando i risultati di cui sopra a $ location contenente l'intero blocco di codice come String.

risposta

7

Per V1, vorrei avvolgere l'istruzione switch in una funzione.

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

Inoltre, il codice originale ottiene una stringa del codice perché si crea uno ScriptBlock ({switch() ...}), ma non lo si invoca: & {switch() ...} – JasonMArcher

2

Il seguente lavoro funziona?

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

O forse

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

Non ce l'ho v1 qui per testare, in questo momento, ma credo che potrebbe funzionare.

+0

Aren ' le tue due scelte sono le stesse? –

+0

Non più, grazie :) – Joey