我被这个powershell脚本卡住了。
该脚本执行以下操作:当用户按下y时:1.球棒打开并运行3秒,然后关闭。然后,脚本询问用户是否要再次运行1.bat,或者当用户按下q时,脚本需要继续,但脚本结束
#Asks to start Password reset again if it fails
while($true) {
$readHostValue = Read-Host -Prompt "If Password reset fails enter y or q to continue install"
switch ($readHostValue) {
'y' { Start-Process C:\Users\deniz\Desktop\1.bat -Verb RunAs }
'q' { return # Ending password reset and continue script
}
Default { write-host "Invalid input y or n!" }
}
}
脚本到此停止,但需要继续执行以下操作:
#progress indicators/write-progress
Write-Progress -Activity "AfterLoader" -Status "Installing" -PercentComplete 10
Start-Sleep -Seconds 2
2条答案
按热度按时间vkc1a9a21#
正如Rav's answer所指出的,
return
在switch
语句的action块的上下文中退出封闭的 * 函数或脚本 *。相比之下,
break
和- situationally[1] -continue
只退出switch
语句,这意味着你的无限循环(while ($true) { ... }
)继续,除非你采取额外的行动。在这种情况下,您可以利用
break
语句的一个罕见变体,即可以针对 *labeled语句 * 进行中断的变体:或者,您可以使用布尔变量来确定何时退出
while
循环:[1]如果输入值为 array 的
switch
,则continue
将继续执行 * 下一个元素 *。如果输入是单个对象或单元素数组continue
与break
具有相同的效果,即它退出语句。iezvtpos2#
return语句将退出整个脚本,而不仅仅是循环。这就是为什么你的脚本会停在那里,而不执行其余的代码。