我正在尝试向 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 Service)任务启动后大约有 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