如何从启动映像包中删除 Windows 驱动程序
在 Configuration Manager 中,通过从 ReferencedDrivers
SMS_BootImagePackage 服务器 WMI 类对象的 属性中删除 Windows 驱动程序,从操作系统部署启动映像包中删除该驱动程序。
注意
在分发点上刷新和更新启动映像包之前,不会删除驱动程序。
从启动映像包中删除 Windows 驱动程序
设置与 SMS 提供程序的连接。 有关详细信息,请参阅 SMS 提供程序基础知识。
获取包含要删除的驱动程序的启动映像包的 SMS_BootImagePackage 对象。
从
ReferencedDrivers
属性中删除驱动程序。 驱动程序由其配置项目标识符标识,该标识符由ID
SMS_Driver_Details Server WMI 类 对象的 属性表示。 此标识符与 的SMS_Driver
属性匹配CI_ID
。SMS_BootImagePackage
提交对象更改。通过调用
RefreshPkgSource
刷新启动映像包。
示例
以下示例方法从启动映像包中删除 Windows 驱动程序。 包由其 PackageID
属性标识,驱动程序由其 CI_ID
属性标识。
有关调用示例代码的信息,请参阅调用Configuration Manager代码片段。
Sub RemoveDriverFromBootImagePackage(connection, driverId, packageId)
Dim bootImagePackage
Dim driver
Dim driverDetails
Dim newReferencedDrivers()
Dim found
Dim index
' Get the boot image package.
Set bootImagePackage = connection.Get("SMS_BootImagePackage.PackageID='" & packageId &"'" )
found = False
index=0
' Copy the contents and leave out the driver.
For Each driver In bootImagePackage.ReferencedDrivers
If driver.ID = driverID Then
found=True
Else
Set newReferencedDrivers(index)=driver
index = index + 1
End If
Next
' Update the referenced drivers.
If found=True Then
ReDim preserve newReferencedDrivers(UBound(bootImagePackage.ReferencedDrivers)-1)
bootImagePackage.ReferencedDrivers=newReferencedDrivers
bootImagePackage.Put_
bootImagePackage.RefreshPkgSource
End If
End Sub
public void RemoveDriverFromBootImagePackage(
WqlConnectionManager connection,
int driverId,
string packageId)
{
try
{
// Get the boot image package.
IResultObject bootImagePackage = connection.GetInstance(@"SMS_BootImagePackage.packageId='" + packageId + "'");
// Get the (SMS_Driver_Details) drivers referenced by the package.
List<IResultObject> referencedDrivers = bootImagePackage.GetArrayItems("ReferencedDrivers");
foreach (IResultObject ro in referencedDrivers)
{
if (ro["ID"].IntegerValue == driverId) // Remove the driver that matches driverId.
{
referencedDrivers.Remove(ro);
break;
}
}
bootImagePackage.SetArrayItems("ReferencedDrivers", referencedDrivers);
// Commit the changes.
bootImagePackage.Put();
bootImagePackage.ExecuteMethod("RefreshPkgSource", null);
}
catch (SmsException e)
{
Console.WriteLine(e.Message);
throw;
}
}
示例方法具有以下参数:
参数 | 类型 | 说明 |
---|---|---|
Connection |
-管理: WqlConnectionManager - VBScript: SWbemServices |
与 SMS 提供程序的有效连接。 |
driverID |
-管理: Integer - VBScript: Integer |
中 SMS_Driver.CI_ID 可用的 Windows 驱动程序标识符。 |
PackageID |
-管理: String - VBScript: String |
中 SMS_BootImagePackage.PackageID 可用的启动映像包标识符。 |
编译代码
此 C# 示例需要:
命名空间
System
System.Collections.Generic
System.Text
Microsoft。ConfigurationManagement.ManagementProvider
Microsoft。ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
可靠编程
有关错误处理的详细信息,请参阅关于Configuration Manager错误。
.NET Framework 安全性
有关保护Configuration Manager应用程序的详细信息,请参阅Configuration Manager基于角色的管理。
另请参阅
关于操作系统部署驱动程序管理
如何将 Windows 驱动程序添加到Configuration Manager启动映像包