2011-11-04 223 views
1

我想在下面的Powershell中寫一個Switch語句。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完成此操作?謝謝。

回答

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"} 
    } 
+0

謝謝。第一個做了訣竅。欣賞它。 – user1013264

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} 
    } 
} 
+0

謝謝你。很高興看到它以不同的方式完成。再次謝謝你。 – user1013264