So erstellen Sie ein Treiberpaket für einen Windows-Treiber im Configuration Manager

Sie erstellen ein Paket für einen Treiber für die Betriebssystembereitstellung in Configuration Manager, indem Sie ein Objekt der SMS_DriverPackage Server WMI-Klasse erstellen. Um dem Paket einen Treiber hinzuzufügen, rufen Sie die AddDriverContent-Methode in Klasse SMS_DriverPackage auf.

Treiberpakete werden verwendet, um den mit Treibern verknüpften Inhalt zu speichern. Beim Erstellen eines Treiberpakets sollte der Quellspeicherort zunächst eine leere Freigabe sein, auf die der SMS-Anbieter über Lese- und Schreibzugriff verfügt. Wenn einem Treiberpaket ein Treiber hinzugefügt wird, AddDriverContentkopiert der SMS-Anbieter den Inhalt vom Quellspeicherort des Treibers in ein Unterverzeichnis in der Treiberpaketfreigabe.

Der Inhalt, der einem Treiber zugeordnet ist, muss einem Treiberpaket hinzugefügt und einem Verteilungspunkt zugewiesen werden, bevor der Client ihn verwenden kann. Sie erhalten den Treiberinhalt aus dem SMS_CIToContent Server WMI-Klassenobjekt , wobei die CI_ID Eigenschaft mit der Treiber-ID übereinstimmt.

Hinweis

Es ist möglich, dass mehrere Treiber denselben Inhalt teilen. Dies geschieht in der Regel, wenn sich mehrere INF-Dateien im selben Verzeichnis befinden.

AddDriverContent Kann verwendet werden, um mehrere Treiber gleichzeitig zu einem Paket hinzuzufügen. Fügen Sie hierzu mehrere Inhalts-IDs hinzu. Der bRefreshDPs Parameter sollte festgelegt werden, wenn false ein weiterer Aufruf erfolgt. Dadurch wird sichergestellt, dass das Paket auf dem Verteilungspunkt nur einmal aktualisiert wird.

Wenn Sie AddDriverContentaufrufen, geben Sie eine Reihe von Paketquellspeicherorten an. In der Regel handelt es sich dabei um die Objekteigenschaft SMS_Driver Server WMI ClassContentSourcePath, die jedoch überschrieben werden kann, wenn der Anbieter keinen Zugriff auf den ursprünglichen Quellspeicherort hat.

So erstellen Sie ein Treiberpaket und fügen Treiberinhalt hinzu

  1. Richten Sie eine Verbindung mit dem SMS-Anbieter ein. Weitere Informationen finden Sie unter Grundlagen des SMS-Anbieters.

  2. Erstellen Sie ein SMS_DriverPackage Objekt.

  3. Legen Sie die PkgSourceFlag Eigenschaft des SMS_DriverPackage Objekts auf 2 (Storage Direct) fest.

  4. Führen Sie einen Commit für das SMS_DriverPackage Objekt durch.

  5. Holen Sie sich das SMS_DriverPackage Objekt.

  6. Fügen Sie die Liste der Treiber, die Sie dem Paket hinzufügen möchten, in die AddDriverContent-MethodeContentIDs im Parameter ein.

  7. Fügen Sie die Liste der Treiberinhaltsquellpfade in die AddDriverContent Methode ContentSourcePath im Parameter ein.

  8. Aufrufen der AddDriverContent Methode.

  9. Rufen Sie die RefreshPkgSource-Methode in Klasse SMS_DriverPackage auf, um den Vorgang abzuschließen.

  10. Weisen Sie das Treiberpaket einem Verteilungspunkt zu. Weitere Informationen finden Sie unter So weisen Sie einem Verteilungspunkt ein Paket zu.

Beispiel

Die folgende Beispielmethode erstellt ein Paket für eine bereitgestellte Treiber-ID, die durch die CI_ID Eigenschaft des SMS_Driver Server WMI-Klassenobjekts dargestellt wird. Die Methode akzeptiert auch einen neuen Paketnamen, eine neue Beschreibung und einen Paketquellpfad als Parameter.

Hinweis

Der packageSourcePath Parameter muss als UNC-Netzwerkpfad (Universal Naming Convention) angegeben werden, z. B. \\localhost\Drivers\ATIVideo\.

Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen von Configuration Manager-Codeausschnitten.

Sub CreateDriverPackage(connection, driverId, newPackageName, newPackageDescription,  newPackageSourcePath)

    Dim newPackage
    Dim driver
    Dim packageSources
    Dim refreshDPs
    Dim content
    Dim path
    Dim contentIds
    Dim index
    Dim item

    ' Create the new driver package object.
    Set newPackage = connection.Get("SMS_DriverPackage").SpawnInstance_

    ' Populate the new package properties.
    newPackage.Name = newPackageName
    newPackage.Description = newPackageDescription
    newPackage.PkgSourceFlag = 2 ' Storage direct
    newPackage.PkgSourcePath = newPackageSourcePath

    ' Save the package.
    path=newPackage.Put_

    ' Get the newly created package (Do this to call AddDriverContent).
    Set newPackage=connection.Get(path)

    ' Get the driver
    Set driver = connection.Get("SMS_Driver.CI_ID=" & driverId )

    ' Get the driver content.
    Set content = connection.ExecQuery("Select * from SMS_CIToContent where CI_ID=" & driverId)

    If content.Count = 0 Then
        Wscript.Echo "No content found"
        Exit Sub
    End If

    ' Create Array to hold driver content identifiers.
    contentIds = Array()
    ReDim contentIds(content.Count-1)
    index = 0

    For Each item In content
        contentIds(index) = item.ContentID
        index = index+1
    Next

    ' Create sources path Array.
    packageSources = Array(driver.ContentSourcePath)
    refreshDPs = False

    ' Add the driver content.
    Call newPackage.AddDriverContent(contentIds,packageSources,refreshDPs)
    wscript.echo "Done"

End Sub
public void CreateDriverPackage(
    WqlConnectionManager connection,
    int driverId,
    string newPackageName,
    string newPackageDescription,
    string newPackageSourcePath)
{
    try
    {
        if (Directory.Exists(newPackageSourcePath) == false)
        {
            throw new DirectoryNotFoundException("Package source path does not exist");
        }

        // Create new package object.
        IResultObject newPackage = connection.CreateInstance("SMS_DriverPackage");

        IResultObject driver = connection.GetInstance("SMS_Driver.CI_ID=" + driverId);

        newPackage["Name"].StringValue = newPackageName;
        newPackage["Description"].StringValue = newPackageDescription;
        newPackage["PkgSourceFlag"].IntegerValue = (int)PackageSourceFlag.StorageDirect;
        newPackage["PkgSourcePath"].StringValue = newPackageSourcePath;

        // Save new package and new package properties.
        newPackage.Put();

        newPackage.Get();

        // Get the content identifier.
        List<int> contentIDs = new List<int>();
        IResultObject content = connection.QueryProcessor.ExecuteQuery("Select * from SMS_CIToContent where CI_ID=" + driverId);

        foreach (IResultObject ro in content)
        {
            contentIDs.Add(ro["ContentID"].IntegerValue);
        }

        // Get the package source.
        List<string> packageSources = new List<string>();
        packageSources.Add(driver["ContentSourcePath"].StringValue);

        Dictionary<string, Object> inParams = new Dictionary<string, object>();

        inParams.Add("bRefreshDPs", true);
        inParams.Add("ContentIDs", contentIDs.ToArray());
        inParams.Add("ContentSourcePath", packageSources.ToArray());

        newPackage.ExecuteMethod("AddDriverContent", inParams);
    }
    catch (SmsException ex)
    {
        Console.WriteLine("Failed to create package. Error: " + ex.Message);
        throw;
    }
}

Die Beispielmethode hat die folgenden Parameter:

Parameter Typ Beschreibung
connection - Verwaltet: WqlConnectionManager
- VBScript: SWbemDienste
Eine gültige Verbindung mit dem SMS-Anbieter.
driverId - Verwaltet: Integer
- VBScript: Integer
Die Treiber-ID (SMS_Driver.CI_ID).
newPackageName - Verwaltet: String
- VBScript: String
Der Name für das Paket.
newPackageDescription - Verwaltet: String
- VBScript: String
Eine Beschreibung für das neue Paket.
newPackageSourcePath - Verwaltet: String
- VBScript: String
Ein gültiger UNC-Netzwerkpfad zum Treiber.

Kompilieren des Codes

Dieses C#-Beispiel erfordert:

Namespaces

System

System.Collections.Generic

System.Text

System.IO

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

Microsoft.ConfigurationManagement.ManagementProvider

adminui.wqlqueryengine

Robuste Programmierung

Weitere Informationen zur Fehlerbehandlung finden Sie unter Informationen zu Configuration Manager-Fehlern.

.NET Framework-Sicherheit

Weitere Informationen zum Sichern von Configuration Manager-Anwendungen finden Sie unter rollenbasierte Verwaltung von Configuration Manager.

Siehe auch

SMS_Driver Server WMI-KlasseAddDriverContent-Methode in Klasse SMS_DriverPackage