Заявление Powershell Switch - PullRequest
       2

Заявление Powershell Switch

2 голосов
/ 05 ноября 2011

Я пытаюсь написать оператор Switch в 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?"}
     }

Что я пытаюсь сделать, так это то, что если пользователь вводит что-либо, кроме Y или N, скрипт должен продолжать запрашивать, пока он не введет ни один из них. Что происходит сейчас, когда пользователь вводит что-либо кроме Y или N, ему снова предлагается запрос. Но когда они вводят любую букву во второй раз, скрипт просто завершается. Он больше не спрашивает пользователя о его вводе. Можно ли сделать это с помощью Switch? Спасибо.

Ответы [ 2 ]

7 голосов
/ 05 ноября 2011

Я не понимаю, что вы пытаетесь сделать по умолчанию в своем коде, но в соответствии с вашим вопросом, вы хотите поместить это в цикл:

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]")

Способ сделать это Powershell:

$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"}
     }
3 голосов
/ 05 ноября 2011

Вы нигде не передаете этот ввод.Вы можете сделать это с помощью рекурсивной функции:

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}
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...