当大家安装好 Windows ADK 之后便可以在 Windows 中创建自定义 Windows PE 环境了,现在我们就开始。
Windows PE 环境非常小巧简洁,大部分引导环境都是现成的,用户在开机之后会将构建好的 WIM 文件直接加载到内存当中。WIM 是 “Windows 映像格式”文件,可专门用于归档所有 Windows 操作系统中的文件。对于 WIM 文件的详细格式分析在 Windows Vista 发布之初我曾写过一个系列的文章,可惜因为博客搬家丢失了。。。
用于 Windows PE 的 WIM 文件会根据你所使用的 32 位或 64 位系统环境位于两个不同的位置,我们的所有步骤演示都以 64 位环境为准,32 位版本步骤相同。
WIM 文件存储于如下路径:
C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\en-us\
由于此文件夹中只有一个 winpe.wim 文件,所以最好复制一个副本来进行操作,以免破坏原版文件。
首先,我们在 PowerShell 中将 Windows PE 媒体文件存放路径定义为一个 $WinAdk 变量。此时需要用到上篇文章中为介绍介绍的 Get-ArchitectureString 函数来判断操作系统架构(当然为了方便,你也可以直接写自己环境的实际路径,我就是这么干的)。
$WinADK='C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\'
然后,我们需要创建一个文件夹来容纳 Windows PE 的 WIM 文件和临时挂载 WIM 文件:
$WinPETemp=’D:\TempPE’
New-Item -ItemType Directory -Path "$WinPETemp\Media" -force
Copy-Item -path "$WinAdk\en-us\winpe.wim" -Destination "$WinPETemp\Media\boot.wim"
New-Item -ItemType Directory -Path "$WinPETemp\Mount" -Force
此时,我们可以使用 PowerShell 的 Mount-WindowsImage cmdlet 将 WIM 文件挂载起来。本步骤会打开 WIM 文件进行编辑,它会提取结构到目标文件夹当中,大家可以添加所需的文件和内容。
Mount-WindowsImage -ImagePath "$WinPETemp\Media\boot.wim" -Index 1 -path "$WinPETemp\Mount"
这在步中,我们需要将一系列的软件添加到 WIM 文件以增强其功能。要查找可用于 Windows PE 的软件和功能名单,大家可以参考此篇 Technet 文章,这篇文章描述了所有当前可用的 Pacakge 和依赖性。
关于扩展组件包(OCS 文件)列表大家可以到 WinPE_OCS 文件夹查看。
在我们的 Windows PE 环境中不仅要添加 Windows PowerShell 还将添加存储和 DISM cmdlets。
对于我们要添加的每个组件,我们都可以使用 Windows PE 组件 CAB 文件可选项的方式将其加载到已挂载的 WIM 当中。要做到这一点,我们可以使用 Add-WindowsPackage cmdlet。以下就是使用该 cmdlet 将 WMI 组件添加到 Windows PE 环境的实例:
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\WinPE-WMI.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\zh-cn\WinPE-WMI_zh-cn.cab" -Path "$WinPeTemp\Mount" -IgnoreCheck
若要添加我们所有可用组件,该脚本看起来像这样:
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\WinPE-WMI.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\zh-cn\WinPE-WMI_zh-cn.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\WinPE-NetFx.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\zh-cn\WinPE-NetFx_zh-cn.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\WinPE-Scripting.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\zh-cn\WinPE-Scripting_zh-cn.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\WinPE-PowerShell.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\zh-cn\WinPE-PowerShell_zh-cn.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\WinPE-DismCmdlets.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\zh-cn\WinPE-DismCmdlets_zh-cn.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\WinPE-EnhancedStorage.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\zh-cn\WinPE-EnhancedStorage_zh-cn.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\WinPE-StorageWMI.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
Add-WindowsPackage -PackagePath "$($WinAdk)\Winpe_OCS\zh-cn\WinPE-StorageWMI_zh-cn.cab" -Path "$WinPeTemp\Mount" –IgnoreCheck
相信大家已经按自己的需求和上诉方法更新并自定义了 WIM 文件,此时,我们便可以取消挂载并保存映像:
Dismount-WindowsImage -Path 'D:\TempPE\Mount' -Save
大家可以对文件进行备份,以便后面使用:
$Destination='D:\PEWIM'
New-Item -Path $Destination -ItemType Directory –Force
Copy-Item -path "$WinPETemp\Media\boot.wim" -destination "$Destination\"
至此,我们已经为 Windows PE 环境的 WIM 文件成功启用了 Windows PowerShell 5.0 !本系列的下篇文章中,我将向大家介绍如何使用 Powershell 来创建一个 Windows PE 启用 U 盘,欢迎大家持续关注。