2011-11-04 6 views
1

J'essaie d'écrire une instruction Switch dans Powershell comme ci-dessous.Énoncé du commutateur Powershell

$Prompt = Read-host "Should I display the file contents c:\test for you? (Y | N)" 
Switch ($Prompt) 
    { 
     Y {Get-ChildItem c:\test} 
     N {Write-Host "User canceled the request"} 
     Default {$Prompt = read-host "Would you like to remove C:\SIN_Store?"} 
    } 

Ce que je suis en train de faire est que si l'utilisateur entre autre chose que Y ou N, le script devrait continuer à poser jusqu'à ce qu'ils entrent dans l'une des personnes. Ce qui se passe en ce moment est que lorsque l'utilisateur saisit autre chose que Y ou N, il est de nouveau invité. Mais quand ils tapent une lettre la seconde fois, le script se termine. Il ne demande plus à l'utilisateur son entrée. Est-il possible d'accomplir cela en utilisant Switch? Je vous remercie.

Répondre

7

Je ne comprends pas ce que vous essayez de faire défaut dans votre code, mais par votre question, vous voulez mettre dans une boucle:

do{ 

$Prompt = Read-host "Should I display the file contents c:\test for you? (Y | N)" 
Switch ($Prompt) 
{ 
    Y {Get-ChildItem c:\test} 
    N {Write-Host "User canceled the request"} 
    Default {continue} 
} 

} while($prompt -notmatch "[YN]") 

façon Powershell de le faire:

$caption="Should I display the file contents c:\test for you?" 
$message="Choices:" 
$choices = @("&Yes","&No") 

$choicedesc = New-Object System.Collections.ObjectModel.Collection[System.Management.Automation.Host.ChoiceDescription] 
$choices | foreach { $choicedesc.Add((New-Object "System.Management.Automation.Host.ChoiceDescription" -ArgumentList $_))} 


$prompt = $Host.ui.PromptForChoice($caption, $message, $choicedesc, 0) 

Switch ($prompt) 
    { 
     0 {Get-ChildItem c:\test} 
     1 {Write-Host "User canceled the request"} 
    } 
+0

Merci. Le premier a fait l'affaire. Appréciez-le. – user1013264

3

Vous ne pouvez pas acheminer cette entrée n'importe où. Vous pouvez le faire avec une fonction récursive:

Function GetInput 
{ 
$Prompt = Read-host "Should I display the file contents c:\test for you? (Y | N)" 
Switch ($Prompt) 
    { 
     Y {Get-ChildItem c:\test} 
     N {Write-Host "User canceled the request"} 
     Default {GetInput} 
    } 
} 
+0

Merci aussi. C'est bon de voir cela se faire de différentes manières. Encore merci. – user1013264