去年的大部分时间里,我一直在测试一个替代映像系统来替换我们有限的 Ghost 部署系统。我们购买了一批新机器(HP Workstation Z230),这些机器配有 Intel i217-LM NIC。我遇到了很多麻烦,无法让这个小家伙与 WinPE 很好地配合使用。我以为我已经解决了所有问题,但我又一次陷入了困境,比以前更加困难。
我们的映像服务器由安装了 WDS、WAIK 和 MDT 的 Windows Server 2012 机箱组成。部署到其他硬件平台工作正常,但是当我尝试较新的 Z230 机器时,我收到一条消息:
向导错误
无法连接到部署共享 (\servername\sharename$)。以下网络设备未安装驱动程序。PCI\VEN_8086&DEV_153A&SUBSYS_1905103C&REV_05
重试:再次尝试连接到部署共享。取消:放弃,取消任何正在进行的任务序列。
这是 PxE 启动客户端并选择 LiteTouchx64 启动映像后弹出的第一件事。我没有其他选择。
我知道这很可能是驱动程序问题(又来了!)。所以我用 F8 调出命令行,并尝试使用老旧的 ipconfig。什么都没有。根本没有列出适配器。我回头查看了 MDT,并确认上次修复问题的 INF 文件位于“开箱即用驱动程序”文件夹中(我们还根据制造商、操作系统和型号对驱动程序进行了分类;Hewlett-Packard->Windows 7 x64->HP Tower Workstation Z230。这些是使用命令行中的“wmic”命令和相应的标志找到的)。当然,它在那里。为了安全起见,我更新了部署共享。没有运气。我尝试了 x64 和 x86 启动映像。同样,什么都没有。
于是我回到英特尔网站,再次下载了 NIC 驱动程序。重复上述步骤,仍然一无所获。
我接下来尝试的是使用闪存驱动器中的 drvload 命令通过命令行手动加载驱动程序(来自英特尔网站的更新驱动程序):
对于 64 位 WinPE 映像
drvload F:\Winx64\NDIS63\e1d63x64.inf
或者,对于 32 位:
drvload F:\Win32\NDIS63\e1d6332.inf
有关更多信息,请参阅:http://www.adamfowlerit.com/2013/10/08/troubleshooting-nic-drivers-in-winpe-for-sccm-2012/
这两个命令都经过了 10-20 秒的等待,然后才完成并退出,并显示“已成功完成”消息。然后我返回 ipconfig,发现我现在有一个 IP 地址。我单击了重试,其余操作系统部署完成(有一些不相关的错误,现已修复)。Windows 设置并启动后,我检查了设备管理器,看看这个 NIC 出了什么问题。
我发现了一些有趣的事情:首先,驱动程序已自动从 MDT 中拉出,所以我知道那里有正确的驱动程序。其次,Windows 使用的是不同的驱动程序 inf (e1d62x64.inf)。
因此我检查以确保该驱动程序也在 MDT 中:确实如此。我再次尝试,这次手动加载 Windows 中指定的驱动程序。该命令“成功完成”,但当我转到 ipconfig 并检查它是否有效时,没有列出适配器,也没有 IP 地址。
我也尝试过:
wmic nic get name
返回:
Name
Microsoft Kernel Debug Network Adapter
因此我再次手动加载了 e1d63x64.inf 文件并再次尝试:
Name
Microsoft Kernel Debug Network Adapter
Intel(R) Ethernet Connection I217-LM
太棒了。它起作用了。因此,我再次确保驱动程序在 MDT 中。我还尝试再次添加它,这次只是添加到 Out-of-box Drivers 文件夹中,而不是任何其他文件夹下。再次更新部署共享,再试一次,但没有任何效果。
我接下来尝试的是手动将硬件 ID 添加到 e1d63x64.inf 文件中,以便它能够自动提取。我真的不知道自己在做什么,所以我可能做错了。我最终看到一部分行列出了硬件 ID 和其他一些乱码,所以我将 HW ID 添加到此部分。(就像我说的,我不知道自己在做什么,这是一次盲目的尝试)。
我还尝试手动将驱动程序注入 LiteTouch 映像的副本中。我能够使用 DISM 安装映像,但当我尝试使用 /recurse 和 /forceunsigned 注入驱动程序时(几个月前我尝试的第一个版本的驱动程序是未签名的,这让我有些头疼。我还尝试了两者的组合)无法注入驱动程序,而且我认为这不是生产环境的有效解决方案,所以我没有再花时间。
我还检查了 DISM 日志,发现了以下几行:
2014-12-05 10:12:11,信息 DISM DISM 提供程序存储:PID=9932 TID=8808 获取提供程序驱动程序管理器 - CDISMProviderStore::GetProvider 2014-12-05 10:12:11,信息
DISM DISM 提供程序存储:PID=9932 TID=8808 提供程序之前已初始化。返回现有实例。- CDISMProviderStore::Internal_GetProvider 2014-12-05 10:12:11,警告 DISM DISM 驱动程序管理器:PID=9932 TID=8808 无法从驱动程序存储中获取驱动程序类 {4D36E972-E325-11CE-BFC1-08002BE10318} 的启动关键状态。假设这不是启动关键状态。 - CDriverPackage::InitBootCriticalFlag(hr:0x80070490) 2014-12-05 10:12:11,信息 DISM DISM 驱动程序管理器:PID=9932 TID=8808 驱动程序 C:\DeploymentShare\Out-of-box Drivers\Net\e1c63x64_12.10.29.0_BB24AD7808CE1BF67EDB58B8B4A03234EFF8712D\e1d63x64.inf 的签名状态为:UNSIGNED - CDriverPackage::InitSignatureStatus 2014-12-05 10:12:16,信息 DISM DISM 驱动程序管理器:PID=9932 TID=8808 已成功处理驱动程序包“C:\DeploymentShare\Out-of-box驱动程序\Net\e1c63x64_12.10.29.0_BB24AD7808CE1BF67EDB58B8B4A03234EFF8712D\e1d63x64.inf”。- CDriverPackage::InstallEx
因此被视为非启动关键且未签名。有没有办法将此驱动程序声明为启动关键?如果有,该怎么做?这有可能解决问题吗?
概括
总结和澄清:我无法在 WinPE 期间加载 i217-LM NIC,因此我无法在 PxE 启动期间连接到部署共享,也无法选择任何任务序列。通过使用“drvload”命令手动加载驱动程序,我可以解决这个问题并完成部署,但是由于需要映像的计算机数量众多,这不是理想的解决方案,因此我希望找到一个修复程序,以便驱动程序可以自动加载。
答案1
所需的 NIC 驱动程序“必须”在启动时由 loaddrv 离线注入和加载,或者在 Boot.wim 文件中在线注入 (Dism)。当然,如果 NIC 驱动程序未正确加载,您将永远看不到 MDT 存储库,这意味着无法使用其共享访问 MDT 提供的任何内容。
我认为 PE 正在检测 NIC,但是您的驱动程序未正确“在线”注入,这就是为什么如果您使用 loaddrv 手动加载驱动程序,一切都会正常工作。
答案2
答案3
从解压的 CAB 文件中,删除网络驱动程序文件夹。导入除网络驱动程序文件夹中的驱动程序之外的所有驱动程序。导入完成后,再导入网络驱动程序。这解决了我的问题。