我有一个用于自动化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继续或任何其他键中止'
我似乎无法找到一种简单的方法来做到这一点?我所见过的所有内容似乎都涉及将整个脚本嵌套在代码块中,而我却不愿意这样做。 = /
谢谢!
答案 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"