Windows 10 1809的support截至日期在2021年5月11号,没有了support之后,微软将停止提供每个月的Windows Update,将产生安全问题。

对于企业客户来说要及早进行并完成相关的GPO及APP测试,并在此之前推送Windows Upgrade到1909版本以上。
相关的lifecycle信息来自微软。

https://docs.microsoft.com/en-us/lifecycle/products/windows-10-enterprise-and-education

手动升级Windows 10将会给运维带来极大挑战和人力成本,利用客户端管理软件是最好的选择,可以利用SCCM创建application来做升级,以下分享一下大致的方案。

创建1909 升级Application

  1. detection rule 可以用powershell脚本通过wmi来检测系统版本
    利用win32_computeropratingsystem

利用SCCM完成Windows 10 1909 In-Place Upgrade

  1. 具体的升级兼容性检测以及升级处理部分
    获取1909的原版安装ISO文件,解压得到安装文件如下。
    利用SCCM完成Windows 10 1909 In-Place Upgrade

setup是执行升级文件,对于这个执行文件的参数可以从微软官网获取。
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-setup-command-line-options

直接执行升级操作可能带来失败,从而花费大量时间回滚,有一个更好的方法是指定Compat参数先执行升级兼容性检测,检测通过后再执行升级操作,增加成功率,减少失败带来的等待时间。
直接参数如下
"setup.exe" "/Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable /Compat ScanOnly"
命令完成后会返回检测结果
如果返回的值为0xC1900210表示没有发现问题,可以继续执行升级操作。
具体的返回值如下
https://docs.microsoft.com/en-us/windows/deployment/upgrade/upgrade-error-codes
利用SCCM完成Windows 10 1909 In-Place Upgrade

用powershell脚本来处理

Write-Host "Validating if Windows 10 1909 Update can be applied"
$ValCode = Start-Process -FilePath "setup.exe" -ArgumentList "/Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable /Compat ScanOnly" -Wait -PassThru
$ValCodeHex = [convert]::ToString($ValCode.ExitCode, 16)
Write-Host "Exit Code for Windows 10 Validation: 0x$($ValCodeHex)"
switch ($ValCodeHex) {
    "C1900210" {    Write-Host "No issues found. Proceeding with the update."   }
    "C1900208" {    Write-Host "Compatibility issues found. Exiting the upgrade."; QuitFailure -Code '1900208'}
    "C1900204" { Write-Host "Migration choice not available. Exiting the upgrade."; QuitFailure -Code '1900204' }
    "C1900200" { Write-Host "Does not meet system requirements for Windows 10. Exiting the upgrade."; QuitFailure -Code '1900200' }
    "C190020E" { Write-Host "Insufficient free disk space. Exiting the upgrade."; QuitFailure -Code '190020E' }
    default { Write-Host "Upgrade failed. Exiting the upgrade."; QuitFailure -Code '1' }
}

$ExitCode = Start-Process -FilePath "setup.exe" -ArgumentList '/auto upgrade /quiet /noreboot /showoobe none /DynamicUpdate Disable' -Wait -PassThru

Write-Host "ExitCode of Setup: $($ExitCode.ExitCode)"
  1. 修复SCCM客户端
    升级1909后系统会重建。Net运行库,有一定几率会导致SCCM agent损坏,可以添加一个计划任务调用ccmrepair.exe来修复SCCM,调用脚本执行如下
    Start-Service -Name CcmExec; Start-Sleep -Seconds 5; If((Get-Service -Name CcmExec).Status -ne 'Running'){ & C:\windows\ccm\ccmrepair.exe | out-null}