powershell - 如何等待用户输入

时间:2013-10-22 17:29:54

标签: powershell

我试图阻止用户在某些情况下关闭计算机。我正在显示确认消息。这就是我的脚本的样子:

$sysevent = [microsoft.win32.systemevents]

Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action $OnShutdown -SourceIdentifier "ExecuteOnShutdown"

$OnShutdown = 
{

    Write-Host  -ForeGround Green $event.SourceEventArgs.Reason

    $OUTPUT= [System.Windows.Forms.MessageBox]::Show("Do you really want to shutdown the computer?." , "confirm" , 4)

    Write-Host  $OUTPUT

}

这很好但我不知道如何挂起shutdown命令直到用户点击“是”或“否”。有没有办法阻止系统关闭并等待用户单击“是”或“否”然后根据答案关闭服务器?

2 个答案:

答案 0 :(得分:0)

在您的事件处理程序scriptblock中,定义了许多自动变量,其中一个是$EventArgs。在这种情况下,此对象上将有Cancel属性,您可以将其设置为$ true,但文档警告:

  

设置为true时,此属性会请求会话继续   跑。它不保证会话不会结束。

在此上下文中还定义了另一个变量 - $Sender。执行man about_automatic_variables了解更多信息。

答案 1 :(得分:0)

考虑通过组策略或本地策略关闭/注销脚本部署脚本,这样可以防止关闭,直到满足条件。你可能需要在条件睡眠循环中包装你的消息框调用(这是我几年前在VBScript中做类似的事情!),也许不是。

如果您选择使用此方法,您可能还希望为消息框添加首选默认选择(可能在指定的超时时间过后?);用户可能不会闲逛以查看您的mesaagebox,因为它将在交互式桌面卸载后绘制。

以下是Technet文章中有关如何Use Startup, Shutdown, Logon, and Logoff Scripts的链接。

我不确定这是否能解决您的问题,因为这不会阻止关机,只是在您的情况得到满足之前就会停止。

相关问题