0

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

$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

}

这工作正常,但我不知道如何暂停关机命令,直到用户单击“是”或“否”。有没有办法防止系统关闭并等待用户单击“是”或“否”然后根据答案关闭服务器?

4

2 回答 2

0

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

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

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

于 2013-10-22T17:37:17.170 回答
0

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

如果您选择使用此方法,您可能还希望为您的消息框包含一个首选的默认选择(可能在指定的超时期限过后?);用户可能不会看到您的消息框,因为它将在交互式桌面卸载后绘制。

这是 Technet 文章的链接,该文章介绍了如何 使用启动、关机、登录和注销脚本

我不确定这是否回答了您的问题,因为这不会阻止关闭,它只会停止它,直到满足您的条件。

于 2013-10-22T21:14:42.350 回答