PowerShell - 提示'是否要继续'

时间:2015-09-03 16:32:15

标签: powershell scripting

我有一个用于自动化WSUS进程的脚本,它的最后一个阶段继续删除所有旧/不必要的文件/对象。

我想提示'按'输入'继续删除或任何其他关键停止'在清理阶段之前,让人们可以选择不运行它。

我目前在脚本末尾的代码在这里:

Get-WsusServer 10.1.1.25 -PortNumber 8530 | Get-WsusUpdate -Classification All -Approval Unapproved -Status FailedOrNeeded | Approve-WsusUpdate -Action Install -Target $ComputerTarget -Verbose

Write-Host "Updates have been approved!"
Write-Host "Preparing to clean WSUS Server of obsolete computers, updates, and content files."

#Part2 - WSUS Server Cleanup

##Run Cleanup Command
Get-WsusServer $WSUS_Server -PortNumber $PortNumber | Invoke-WsusServerCleanup -CleanupObsoleteComputers -CleanupObsoleteUpdates -CleanupUnneededContentFiles

在#Part2之前我想要提示'按Enter继续或任何其他键中止'

我似乎无法找到一种简单的方法来做到这一点?我所见过的所有内容似乎都涉及将整个脚本嵌套在代码块中,而我却不愿意这样做。 = /

谢谢!

3 个答案:

答案 0 :(得分:5)

您可以像这样提示用户:

$response = read-host "Press enter to continue or any other key (and then enter) to abort"

如果用户只按Enter键,则$response将为空。 Powershell会将空字符串转换为布尔值false:

$aborted = ! [bool]$response

或者您可以只查询特定字符:

$response = read-host "Press a to abort, any other key to continue."
$aborted = $response -eq "a"

答案 1 :(得分:3)

所以我手头上的东西是Show-MsgBox函数,可以放入脚本中。这样我就可以通过一个简单的命令随意显示一个对话框,它可以显示要显示的按钮,要显示的图标,窗口标题和框中的文本。

Function Show-MsgBox ($Text,$Title="",[Windows.Forms.MessageBoxButtons]$Button = "OK",[Windows.Forms.MessageBoxIcon]$Icon="Information"){
[Windows.Forms.MessageBox]::Show("$Text", "$Title", [Windows.Forms.MessageBoxButtons]::$Button, $Icon) | ?{(!($_ -eq "OK"))}
}

这就是函数的全部内容,那么在你的情况下你可以做类似的事情:

If((Show-MsgBox -Title 'Confirm CleanUp' -Text 'Would you like to continue with the cleanup process?' -Button YesNo -Icon Warning) -eq 'No'){Exit}

然后弹出Yes和No按钮,如果他们单击No,则退出脚本。

答案 2 :(得分:1)

这并不完美,但它会让您的用户有机会逃避脚本。它实际上可能更好,因为这意味着当用户想要按回车键时,用户不会意外点击反斜杠按钮并取消脚本。

Write-Host "Press `"Enter`" to continue or `"Ctrl-C`" to cancel"
do
{
$key = [Console]::ReadKey("noecho")
}
while($key.Key -ne "Enter")
Write-Host "Complete"