运行Powershell脚本,重新启动然后继续运行

时间:2014-06-28 17:25:59

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

我刚刚开始介绍Powershell脚本的基础知识,我正在研究为一组指令创建脚本,然后重新启动并继续运行脚本的其余部分。

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

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

2 个答案:

答案 0 :(得分:3)

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

对于您的用例,您可能希望使用其中一个RunOnce键。与往常一样,exhaustive documentation可以在MSDN页面中找到,这里是它的本质:

  

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

     

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

     
      
  • HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \的RunOnce
  •   
  • HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \的RunOnce
  •   
     

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

     

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

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

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 

答案 1 :(得分:0)

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