2009-04-10 6 views
5

Est-il possible d'affecter le résultat d'une instruction switch à une variable.Powershell v1: Est-il possible d'affecter le résultat d'une instruction switch à une variable?

Par exemple, au lieu de:

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

Est-il possible de faire quelque chose de similaire à:

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

Essayer les résultats ci-dessus dans l'emplacement de $ contenant le bloc de code entier en tant que chaîne.

Répondre

7

Pour V1, j'embaquerais l'instruction switch dans une fonction.

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

En outre, le code d'origine obtient une chaîne de code parce que vous créez un ScriptBlock ({switch() ...}), mais vous ne l'invoquez pas: & {switch() ...} – JasonMArcher

2

Est-ce que ce qui suit fonctionne?

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

Ou peut-être

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

Ne pas avoir v1 ici pour tester, en ce moment, mais je pense que cela pourrait fonctionner.

+0

Aren ' Vos deux choix sont-ils les mêmes? –

+0

Plus maintenant, merci :) – Joey

Questions connexes