如何从启动映像包中删除 Windows 驱动程序

在 Configuration Manager 中,通过从 ReferencedDriversSMS_BootImagePackage 服务器 WMI 类对象的 属性中删除 Windows 驱动程序,从操作系统部署启动映像包中删除该驱动程序。

注意

在分发点上刷新和更新启动映像包之前,不会删除驱动程序。

从启动映像包中删除 Windows 驱动程序

  1. 设置与 SMS 提供程序的连接。 有关详细信息,请参阅 SMS 提供程序基础知识

  2. 获取包含要删除的驱动程序的启动映像包的 SMS_BootImagePackage 对象。

  3. ReferencedDrivers 属性中删除驱动程序。 驱动程序由其配置项目标识符标识,该标识符由 IDSMS_Driver_Details Server WMI 类 对象的 属性表示。 此标识符与 的 SMS_Driver属性匹配CI_ID

  4. SMS_BootImagePackage提交对象更改。

  5. 通过调用 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启动映像包