【问题标题】:Running a Powershell script, restarting and then continue to run运行一个Powershell脚本,重启然后继续运行
【发布时间】:2014-06-28 17:25:58
【问题描述】:

我刚刚开始了解 Powershell 脚本的基础知识,正在考虑根据一组指令创建一个脚本,然后重新启动并继续运行脚本的其余部分。

脚本的第一部分对注册表、防火墙和 ip/dns 设置进行了更改,然后重命名了服务器(win2012)。然后需要重新启动以继续安装广告域服务和创建林。

我环顾四周,但并不真正理解这些概念。任何人都可以推荐一种非常简单的方法来实现重启和恢复。

【问题讨论】:

  • 您是在尝试重新启动本地计算机还是远程计算机?当它是远程计算机时,Powershell 工作流可以轻松处理此问题。在本地计算机上恢复工作流程比较棘手。这个article 有两个场景的一些例子。

标签: powershell windows-server-2012 onresume resume reboot


【解决方案1】:

最简单的方法已经内置在 Windows 中。有一堆注册表项,您可以使用它们来配置一些要在重新启动后执行一次的操作。

对于您的用例,您可能希望使用RunOnce 键之一。一如既往,exhaustive documentation 可以在 MSDN 页面中找到,这里是它的精髓:

[...] RunOnce 注册表项会导致程序在用户每次登录时运行。键的数据值是命令行。通过添加 description-string=commandline 形式的条目来注册要运行的程序。您可以在一个键下写入多个条目。如果在任何特定键下注册了多个程序,则这些程序的运行顺序是不确定的。

Windows 注册表包括 [...]:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

默认情况下,运行命令行之前删除 RunOnce 键的值。您可以在 RunOnce 值名称前加上感叹号 (!) 以推迟删除该值,直到命令运行之后。如果没有感叹号前缀,如果 RunOnce 操作失败,下次启动计算机时将不会要求运行关联的程序。

默认情况下,当计算机以安全模式启动时,这些键会被忽略。 RunOnce 键的值名称可以以星号 (*) 为前缀,以强制程序即使在安全模式下也能运行。

因此,基本上您唯一需要做的就是在该 reg 键下创建一个条目,该条目调用 powershell 并将您的脚本作为参数传递。

set-location HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce
new-itemproperty . MyKey -propertytype String -value "Powershell c:\temp\myscript.ps1"

在 HKLM 下使用 RunOnce 将为任何用户运行脚本,但需要提升权限才能写入注册表项。相比之下,HKCU 与当前用户绑定,但不需要额外的权限。

如需重启,只需拨打Windows shutdown command,例如

shutdown /r 

【讨论】:

  • 太棒了,完美运行。但是,如果其他人尝试此解决方案,我必须在设置位置之前的一行中创建“Runonce”键。谢谢
【解决方案2】:

要在重启/崩溃后使用任务调度程序自动恢复 Powershell 工作流程,请在此处查看我的详细 stackoverflow 答案:https://stackoverflow.com/a/31100397/1487851

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多