【问题标题】:Using the task scheduler to start a PowerShell script after reboot重新启动后使用任务计划程序启动 PowerShell 脚本
【发布时间】:2017-07-06 19:57:50
【问题描述】:

所以我正在尝试编写一个执行以下操作的 powershell 脚本:

  • 下载并安装 Windows 更新(完成)
  • 自动重启(完成)
  • 重启后检查是否仍有更新
  • 回到开始,直到没有更多更新为止

我已经构建了我的 powershell 脚本如下:

Import-Module PSWindowsUpdate

Get-Command –module PSWindowsUpdate

Add-WUServiceManager -ServiceID 7971f918-a847-4430-9279-4a52d1efe18d 

Get-WUInstall –MicrosoftUpdate –AcceptAll –AutoReboot

效果完美。

但是,根据某些情况,重新启动后仍有可能存在可供下载和安装的更新。

我想要做的是在每次重新启动后继续运行上面的脚本,直到没有更多的更新可供下载和安装。

我发现 Windows 中的Task scheduler可能很方便。

我还构建了一个“逻辑”来检查是否还有任何更新(并安装它们):

$Output = (Get-WUInstall -MicrosoftUpdate -ListOnly) | Out-String
if($Output.Contains("Update"))
    {
            Write-Host "Updates Available, they will be installed..." 
            Get-WUInstall –MicrosoftUpdate –AcceptAll –AutoReboot
    }else

    {
    Write-Host "There are no updates available. "
    }

上面的代码也可以完美运行。

我的问题是告知在每次重新启动后我可以以何种方式让这个脚本(或多个脚本?)运行,直到没有更多更新......

谢谢

【问题讨论】:

    标签: powershell scripting scheduled-tasks scheduledexecutorservice


    【解决方案1】:

    你已经走在正确的轨道上了。只需将计划任务添加到运行 powershell.exe 的系统中,并将脚本作为参数并将任务触发器设置为“启动时”

    【讨论】:

    • 非常感谢 TToni,但我在想,这是否意味着我的脚本在每次重新启动后都会继续运行(即使没有更多更新了?)。还是您将其视为“长期使用的脚本”?
    • 您可以在脚本中添加逻辑,以便在没有更多要安装的更新时删除计划任务,方法是使用此 cmdlet:Unregister-ScheduledTask(请参阅:blogs.technet.microsoft.com/heyscriptingguy/2015/01/16/…
    • 谢谢马克!我一定会检查的
    【解决方案2】:

    Boxstarter 比您滚动自己的脚本更容易管理。

    然后你用这个命令保存一个脚本:

    # Update Windows and reboot if necessary
    Install-WindowsUpdate -AcceptEula
    

    Boxstarter 还可以使用 Chocolatey 自动安装和设置大量其他软件。有关大量示例,请参阅 this link

    如果无法正常工作,或者如果您真的想推出自己的更新脚本,则需要查看工作流程,这些工作流程可以在重新启动后从中断的地方恢复。查看这两个链接(link1link2)以获取示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2018-05-16
      • 2016-07-18
      相关资源
      最近更新 更多