我怎样才能从PowerShell /命令行创build一个Windows关机脚本?

我已阅读描述使用计算机/用户启动/closures脚本的TechNet页面,这很好,但是我想通过命令行创build这些脚本(而不必在gpedit.msc中单击)。

看起来像%SYSTEMROOT%\ System32 \ GroupPolicy \ Machine \ Scripts中的scripts.inipsscripts.ini指定要运行的脚本,但这些脚本在第一次运行gpedit.msc之前不存在。 直接创build和编辑这些文件是否安全? 或者我需要使用Set-GPO或类似的东西? 谢谢!

组策略假定您处于Active Directory域环境中,在这种情况下,组策略对象(GPO)将被集中pipe理并分配给计算机。 对于单个机器,可以使用本地安全策略为集中pipe理的GPO产生类似的结果。

通常在Active Directory中,login脚本被分配给用户对象,但您也可以通过组策略执行此操作。

如果您不使用Active Directory,或者只想在相对较less的计算机上configuration此function,则可以使用Task Scheduler在PowerShell中执行此操作。 使用任务计划程序,您可以创build要在启动,会话结束或login时运行的事件。

你可以用shutdown命令吗?

Technetclosures命令语法

我假设你想要closures事件?

关机事件发生时,运行脚本基本上是不可能的,注销,是的,但关机没有。 我有一个C#应用程序来监听closures消息,但是当消息到达时,不可能产生任何新的进程,并且事件经常被忽略。

  1. Windows将WMclosures消息发送到所有顶级窗口WM_CLOSE等 – 但是按顺序将所有桌面程序。 如果你是最后一个得到它,你没有时间了。

  2. Windows有一个进程加载/卸载模块或DLL锁,这意味着当应用程序正在终止或卸载时,应用程序无法在同一时刻加载 – 它是一个线程“共享共享的东西”保护问题。 为了节省RAM,但是在繁忙的时期,让操作系统的运行速度放慢了一些。

  3. Windows有一个内部标志说,不要启动任何新的进程或我们正在终止的脚本。 这意味着无论什么监听,只能写入远程文件或使用TCP连接或类似的让人知道它的结束。 关机期间通常不能运行任何新的脚本。