共用方式為


如何從開機映像套件移除 Windows 驅動程式

在 Configuration Manager 中,您會從 SMS_BootImagePackage Server WMI Class 物件的 屬性中移除 Windows 驅動程式,以從ReferencedDrivers作系統部署開機映射套件中移除它。

注意事項

在發佈點上重新整理和更新開機映射套件之前,不會移除驅動程式。

從開機映像套件移除 Windows 驅動程式

  1. 設定與SMS提供者的連線。 如需詳細資訊,請 參閱SMS提供者基本概念

  2. 取得包含您要移除之驅動程式之開機映像套件的 SMS_BootImagePackage 物件。

  3. 從屬性中移除驅動程式 ReferencedDrivers 。 驅動程式是由其組態專案標識碼所識別,該標識碼是由 SMS_Driver_Details Server WMI Class 物件的 屬性所ID表示。 此識別碼符合 CI_IDSMS_Driver屬性。

  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;
    }
}

範例方法具有下列參數:

參數 Type 描述
Connection -管理: WqlConnectionManager
- VBScript: SWbemServices
SMS 提供者的有效連線。
driverID -管理: Integer
- VBScript: Integer
中可用的 SMS_Driver.CI_IDWindows 驅動程式識別碼。
PackageID -管理: String
- VBScript: String
中可用 SMS_BootImagePackage.PackageID的開機映像套件標識碼。

正在編譯程式碼

此 C# 範例需要:

命名空間

系統

System.Collections.Generic

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

組件

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

健全的程式設計

如需錯誤處理的詳細資訊,請參閱關於 Configuration Manager 錯誤

.NET Framework 安全性

如需保護 Configuration Manager 應用程式的詳細資訊,請參閱 Configuration Manager 角色型系統管理

另請參閱

關於作系統部署驅動程式管理如何將 Windows 驅動程式新增至 Configuration Manager 開機映像套件