用于 Windows 10 更新计划的批处理命令

用于 Windows 10 更新计划的批处理命令

我希望在特定的日期和时间在 Windows 10 机器上运行 Windows 更新(检查并下载更新);比如说星期六晚上 10 点。

是否有执行此操作的批处理命令?然后我可以使用任务计划程序来运行该任务,但我找不到有关此批处理命令的任何文档。

答案1

听起来你需要 powershell 模块更新程序

  1. 打开提升的 powershell (您可能需要设置 Set-ExecutionPolicy RemoteSigned y

  2. Windows 10 具有 powershell 版本 5 或更高版本。

    $PSVersionTable.PSVersion
    
  3. 获取 PSWindowsUpdate 模块(y在所有提示时推送)

     Install-Module PSWindowsUpdate
    
  4. 使用以下命令列出每个可用的 PSWindowsUpdate cmdlet:

     Get-Command -Module PSWindowsUpdate
    
  5. 获取所有微软更新:

     Add-WUServiceManager -ServiceID 7971f918-a847-4430-9279-4a52d1efe18d
    
  6. 运行更新的基本脚本是:

    Get-WUInstall –MicrosoftUpdate –AcceptAll –AutoReboot
    
  7. 现在您需要做的就是创建一个批处理脚本来运行 powershell 脚本。我在一些较旧的机器上使用的脚本如下:

执行脚本:TempCfg\winupdate_execution_policy_bypass.bat

@echo on
echo Loading Powershell with Correct Policy...
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\TempCfg\winupdate_powershell_script.ps1""' -Verb RunAs}"
echo waiting for 90 seconds before exit
timeout /t 90
exit

C:\TempCfg\winupdate_powershell_script.ps1(这也显示了我如何将各种命令导出到文本文件以便于审查。)

Write-Verbose ‘Windows Update’ -verbose
Import-Module PSWindowsUpdate -verbose
Invoke-Command  {Get-Date -Format G -verbose | Out-File -FilePath C:\TempCfg\logs\winlog1.txt -Append -width 300}
Invoke-Command  {Get-WUServiceManager -verbose | Out-File -FilePath C:\TempCfg\logs\winlog1.txt -Append -width 300}
Invoke-Command  {Get-Date -Format G -verbose | Out-File -FilePath C:\TempCfg\logs\winlog2.txt -Append -width 300}
Invoke-Command  {Get-WURebootStatus -verbose | Out-File -FilePath C:\TempCfg\logs\winlog2.txt -Append -width 300}
Invoke-Command  {Get-Date -Format G -verbose | Out-File -FilePath C:\TempCfg\logs\winlog3.txt -Append -width 300}
Invoke-Command  {Get-WUInstallerStatus -verbose | Out-File -FilePath C:\TempCfg\logs\winlog3.txt -Append -width 300}
Invoke-Command  {Get-Date -Format G -verbose | Out-File -FilePath C:\TempCfg\logs\winlog5.txt -Append -width 300}
Import-Module PSWindowsUpdate -verbose
Write-Verbose ‘Invoking command Get-WUInstall -MicrosoftUpdate -IgnoreUserInput -AcceptAll -AutoReboot -Verbose’ -verbose
Invoke-Command  {Get-WUInstall  -AcceptAll -AutoReboot -Confirm:$FALSE -verbose | Out-File -FilePath C:\TempCfg\logs\winlog5.txt -Append -width 300}

例如,我在任务计划程序中将其设置为管理员 C:\TempCfg\winupdate_execution_policy_bypass.bat

  1. 然后,您只需要找到一种方法来关闭 Windows 更新,例如组策略编辑器或第三方程序。不过,您需要在更新期间解除对服务的阻止,以使脚本正常工作,因此请先尝试组策略编辑器。

  2. 我还导入了一个新的电源计划,这样计算机在此过程中就不会进入睡眠状态。最后,我只导出了两个电源计划,一个是标准电源计划,另一个是计算机不会进入睡眠状态的电源计划。您可以使用 set active 命令,如果没有其他人使用计算机,我的方法只是排除人们更改计划的可能性。

电源计划设置

@echo on
powercfg -restoredefaultschemes 
powercfg -import "C:/TempCfg/Normal_Power_Plan.pow" 7aa3bc66-a968-4dd6-bbb9-24c28a3c7fa0
powercfg -import "C:/TempCfg/Automation_No_Sleep_Power_Plan.pow" a1ab2547-f518-4802-9912-2c447afe45cb
powercfg -SETACTIVE a1ab2547-f518-4802-9912-2c447afe45cb
pause

电源计划设置_正常

@echo on
powercfg -restoredefaultschemes 
powercfg -import "C:/TempCfg/Normal_Power_Plan.pow" 7aa3bc66-a968-4dd6-bbb9-24c28a3c7fa0
powercfg -import "C:/TempCfg/Automation_No_Sleep_Power_Plan.pow" a1ab2547-f518-4802-9912-2c447afe45cb
powercfg -SETACTIVE 7aa3bc66-a968-4dd6-bbb9-24c28a3c7fa0
pause
  1. 您可能需要创建一些额外的脚本来让您的计算机登录、注销和重新启动,以使一切顺利运行。

进一步阅读:

相关内容