我正在寻找一种方法来重新应用 wim 映像,而不会丢失 Windows PE 中的任何用户数据。到目前为止,我的脚本如下所示:
$TSProgressUI = New-Object -COMObject Microsoft.SMS.TSProgressUI
$TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment
$OSDDownload = $TSEnv.Value("osDownload01")
$LogsDirectory = $TSEnv.Value("_SMSTSLogPath")
$wimImagePath = "$OSDDownload\install.wim"
$systemDriveLetter = "S"
Remove-Item -Path "$($env:_OSDDetectedWinDrive)Program Files\WindowsApps" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$($env:_OSDDetectedWinDrive)ProgramData\Microsoft\Windows\AppRepository" -Recurse -Force -ErrorAction SilentlyContinue
$wimIndex = (Get-WindowsImage -ImagePath $wimImagePath | Where-Object {$_.ImageName -eq "Windows 10 Enterprise"} | select -property ImageIndex).ImageIndex
dism /Apply-Image /ImageFile:$wimImagePath /index:$wimIndex /ApplyDir:$($env:_OSDDetectedWinDrive)
#dism /Image:$($env:_OSDDetectedWinDrive) /Cleanup-Image /RestoreHealth /Source:$wimImagePath /LimitAccess
Get-Partition | Where-Object {$_.GptType -eq "{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}"} | Set-Partition -NewDriveLetter $systemDriveLetter
cmd /c """$($env:_OSDDetectedWinDrive)Windows\System32\bcdboot.exe"" ""$($env:_OSDDetectedWinDrive)Windows"" /s $($systemDriveLetter): /f UEFI"
但是,在我尝试了 apply-image 命令之后,我的 Windows 安装仍然停留在加载屏幕。如果我重置,我会收到消息“计算机意外重启或遇到意外错误”。
知道我做错了什么吗?
谢谢md
答案1
好吧,我想要的方式没有奏效。同时,我不想将 21H2 映像作为额外的升级包添加到 SCCM 中,因为从 20H2 到 21H2 您只需要启用包。
所以我做了以下事情:
首先,我创建了一个新包,其中包含光盘中的所有安装文件,但没有 install.wim,我用 0KB 的 boot.wim 文件替换了 boot.wim。此外,我还添加了 SMSTSPostUpgrade 文件夹,这是我从之前的升级 TS 中获取的。其中包括 SetupComplete.cmd 和 SetupRollback.cmd。但这只是为了另一种预期的方式,请参阅下面的评论。最后,我得到了一个大约 275MB 的包大小。
在我的 SCCM 任务序列中我执行了以下步骤:
- 下载内容:
我使用“下载包内容”功能下载了一次 Vanilla 安装映像和新创建的安装内容文件。我使用变量 (osImage; osSetup) 保存了这两个文件
创建硬链接以将 install.wim 添加到安装文件夹。也许您也可以将其移动到那里:
$TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment $OSDDownload = $TSEnv.Value("osImage01") $OSDSetup = $TSEnv.Value("osSetup01") fsutil hardlink create "$OSDSetup\sources\install.wim"
“$OSDDownload\install.wim”
我使用源路径 %osSetup01% 和版本索引 3(在本例中为 Enterprise)调用了“升级操作系统”功能
此后,我也可以使用我的任务序列作为修复序列。
顺便说一句。除了“升级操作系统”功能外,我还尝试了 powershell 脚本,但我找不到管理重启的方法:
#$TSProgressUI = New-Object -COMObject Microsoft.SMS.TSProgressUI
$TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment
$OSDDownload = $TSEnv.Value("osImage01")
$OSDSetup = $TSEnv.Value("osSetup01")
$OSDUnattended = $TSEnv.Value("osUnattended01")
$LogsDirectory = $TSEnv.Value("_SMSTSLogPath")
$wimImagePath = "$OSDDownload\install.wim"
#$wimUnattendedPath = "$OSDUnattended\Unattend.xml"
#$systemDriveLetter = "S"
Remove-Item -Path "$($env:_OSDDetectedWinDrive)Program Files\WindowsApps" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$($env:_OSDDetectedWinDrive)ProgramData\Microsoft\Windows\AppRepository" -Recurse -Force -ErrorAction SilentlyContinue
$wimIndex = (Get-WindowsImage -ImagePath $wimImagePath | Where-Object {$_.ImageName -eq "Windows 10 Enterprise"} | select -property ImageIndex).ImageIndex
#dism /Image:$($env:_OSDDetectedWinDrive) /Cleanup-Image /RestoreHealth /Source:$wimImagePath /LimitAccess
#dism /Apply-Image /ImageFile:$wimImagePath /index:$wimIndex /ApplyDir:$($env:_OSDDetectedWinDrive) /Apply-Unattend:$wimUnattendedPath
#Get-Partition | Where-Object {$_.GptType -eq "{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}"} | Set-Partition -NewDriveLetter $systemDriveLetter
#cmd /c """$($env:_OSDDetectedWinDrive)Windows\System32\bcdboot.exe"" ""$($env:_OSDDetectedWinDrive)Windows"" /s $($systemDriveLetter): /f UEFI"
Write-Output "cmd /c start /wait $OSDSetup\setup.exe /ImageIndex $wimIndex /auto Upgrade /quiet /noreboot /EULA accept /Telemetry Disable /postoobe $OSDSetup\SMSTSPostUpgrade\SetupComplete.cmd /postrollback $OSDSetup\SMSTSPostUpgrade\SetupRollback.cmd /postrollbackcontext system /DynamicUpdate Disable /compat IgnoreWarning /InstallFrom $OSDDownload\install.wim"
cmd /c start /wait $OSDSetup\setup.exe /ImageIndex $wimIndex /auto Upgrade /quiet /noreboot /EULA accept /Telemetry Disable /postoobe $OSDSetup\SMSTSPostUpgrade\SetupComplete.cmd /postrollback $OSDSetup\SMSTSPostUpgrade\SetupRollback.cmd /postrollbackcontext system /DynamicUpdate Disable /compat IgnoreWarning /InstallFrom $OSDDownload\install.wim
return 3010