对于企业客户来说要及早进行并完成相关的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
- detection rule 可以用powershell脚本通过wmi来检测系统版本
利用win32_computeropratingsystem
- 具体的升级兼容性检测以及升级处理部分
获取1909的原版安装ISO文件,解压得到安装文件如下。
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
用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)"
- 修复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}