我正在嘗試將一些更新/額外的軟體包添加到 Windows 10 安裝程式映像中。 (例如更新的桌面應用程式安裝程式和 PowerShell)
我能夠將套件配置到已安裝的 WIM 映像而不會出現錯誤,並且該映像可用於成功安裝 Windows。
我的印像是為所有新用戶安裝了預先配置的軟體包,但我添加的軟體包卻沒有。
我可以使用 powershell 手動安裝它們(離線,沒有從互聯網上獲取任何內容),如下所示:
$package = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -eq "Microsoft.DesktopAppInstaller" }
Add-AppxPackage -RegisterByFamilyName -MainPackage $package.PackageName
我在產生 install.wim 時是否遺漏了某個步驟,導致它們無法自動安裝,或者這是預期的結果?
我可以添加一個在首次登入時運行的腳本,以像上面那樣自動安裝它們,但如果不需要,我寧願不這樣做。
更新
下面是我如何新增 DesktopAppInstaller 的範例。
# example
# the following files exist
# C:\Deploy\install.wim
# C:\Deploy\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
# C:\Deploy\Packages\Microsoft.UI.Xaml.2.7.appx
# C:\Deploy\Packages\Microsoft.VCLibs.x64.14.00.Desktop.appx
# C:\Deploy\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe_License1.xml
# C:\Deploy\mount (an empty folder)
$packages = "C:\Deploy\Packages"
$mount = "C:\Deploy\mount"
$image = "C:\Deploy\install.wim"
Mount-WindowsImage -Path $mount -ImagePath $image -Index 1
Add-AppxProvisionedPackage -Path $mount -PackagePath $packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -DependencyPackagePath $packages\Microsoft.UI.Xaml.2.7.appx,$packages\Microsoft.VCLibs.x64.14.00.Desktop.appx -LicensePath $packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe_License1.xml
Dismount-WindowsImage -Path $mount -Save
# the updated install.wim is then copied to the installation media
更新
讀了一些文檔,看起來這可能是不可能的。我從 GitHub 下載了它們,但它可能仍然被視為商店應用程序,因為你可以從那裡獲取它。
您無法旁加載從 Microsoft Store 下載的應用程式。要安裝不屬於您的業務線的 Windows 應用程序,您必須使用 Microsoft Store。
更新
經過進一步的實驗,這些應用程式最終在沒有任何用戶互動的情況下安裝。
然而,這大約需要 15 分鐘,這並不理想!
看看 AppxLogs,在安裝發生之前,「Edge」或「Search」(WSearch 服務)任務啟動後有大約 15 分鐘的時間,但我無法弄清楚它們在做什麼或如何停止它們。
我找不到自動執行上面的手動命令的方法,因為它需要管理員權限,但在閱讀文件後,只有Get-AppxProvisionedPackage
這樣,Add-AppxPackage
才能正常運行。
以下是我如何新增 RunOnce 任務以加快安裝速度的範例。
# working example
# the following files exist
# C:\Deploy\install.wim
# C:\Deploy\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
# C:\Deploy\Packages\Microsoft.UI.Xaml.2.7.appx
# C:\Deploy\Packages\Microsoft.VCLibs.x64.14.00.Desktop.appx
# C:\Deploy\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe_License1.xml
# C:\Deploy\mount (an empty folder)
$packages = "C:\Deploy\Packages"
$mount = "C:\Deploy\mount"
$image = "C:\Deploy\install.wim"
Mount-WindowsImage -Path $mount -ImagePath $image -Index 1
Add-AppxProvisionedPackage -Path $mount -PackagePath $packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -DependencyPackagePath $packages\Microsoft.UI.Xaml.2.7.appx,$packages\Microsoft.VCLibs.x64.14.00.Desktop.appx -LicensePath $packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe_License1.xml
$packageName = Get-AppxProvisionedPackage -Path $mount | Where-Object { $_.DisplayName -eq "Microsoft.DesktopAppInstaller" } | Select-Object -ExpandProperty PackageName
reg load "HKU\DefaultUser" "$mount\Users\Default\NTUSER.DAT"
$key = "Registry::HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\RunOnce"
# create RunOnce if not exist
# close the handle to allow the hive to unload successfully
if ( -Not (Test-Path $key)) {
(New-Item -Path $key -Force).Handle.Close()
}
New-ItemProperty -Path $key -Name "DeployAppInstaller" -PropertyType ExpandString -Value ("""%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe"" -WindowStyle Hidden -ExecutionPolicy ByPass -Command ""Add-AppxPackage -RegisterByFamilyName -MainPackage '{0}'""" -f $packageName) -Force
# sleep may not be required
[gq]::Collect()
Start-Sleep -Seconds 1
reg unload "HKU\DefaultUser"
Dismount-WindowsImage -Path $mount -Save
# the updated install.wim is then copied to the installation media