DISM 应用-图像从 Windows PE 中移出而无需格式化 - 加载屏幕

DISM 应用-图像从 Windows PE 中移出而无需格式化 - 加载屏幕

我正在寻找一种方法来重新应用 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 任务序列中我执行了以下步骤:

  1. 下载内容:

我使用“下载包内容”功能下载了一次 Vanilla 安装映像和新创建的安装内容文件。我使用变量 (osImage; osSetup) 保存了这两个文件

  1. 创建硬链接以将 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”

  2. 我使用源路径 %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

相关内容