我正在尝试在Powershell中编写一个Switch语句,如下所示。
$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完成此操作?谢谢。
答案 0 :(得分:7)
我不明白你在代码中的默认设置中想要做什么,但根据你的问题,你想把它放在一个循环中:
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"}
}
答案 1 :(得分:3)
你没有在任何地方输入那个输入。您可以使用递归函数执行此操作:
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}
}
}