我试图阻止用户在某些情况下关闭计算机。我正在显示确认消息。这就是我的脚本的样子:
$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命令直到用户点击“是”或“否”。有没有办法阻止系统关闭并等待用户单击“是”或“否”然后根据答案关闭服务器?
答案 0 :(得分:0)
在您的事件处理程序scriptblock中,定义了许多自动变量,其中一个是$EventArgs
。在这种情况下,此对象上将有Cancel
属性,您可以将其设置为$ true,但文档警告:
设置为true时,此属性会请求会话继续 跑。它不保证会话不会结束。
在此上下文中还定义了另一个变量 - $Sender
。执行man about_automatic_variables
了解更多信息。
答案 1 :(得分:0)
考虑通过组策略或本地策略关闭/注销脚本部署脚本,这样可以防止关闭,直到满足条件。你可能需要在条件睡眠循环中包装你的消息框调用(这是我几年前在VBScript中做类似的事情!),也许不是。
如果您选择使用此方法,您可能还希望为消息框添加首选默认选择(可能在指定的超时时间过后?);用户可能不会闲逛以查看您的mesaagebox,因为它将在交互式桌面卸载后绘制。
以下是Technet文章中有关如何Use Startup, Shutdown, Logon, and Logoff Scripts的链接。
我不确定这是否能解决您的问题,因为这不会阻止关机,只是在您的情况得到满足之前就会停止。