Freigeben über


Erstellen eines Treiberpakets für einen Windows-Treiber in Configuration Manager

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

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

Es ist erforderlich, den Inhalt, der einem Treiber zugeordnet ist, einem Treiberpaket hinzuzufügen und einem Verteilungspunkt zuzuweisen, bevor der Client ihn verwenden kann. Sie rufen den Treiberinhalt aus dem SMS_CIToContent Server WMI Class-Objekt ab, bei dem die CI_ID Eigenschaft mit dem Treiberbezeichner übereinstimmt.

Hinweis

Es ist möglich, dass mehrere Treiber denselben Inhalt gemeinsam nutzen. Dies geschieht in der Regel, wenn mehrere INF-Dateien im selben Verzeichnis vorhanden sind.

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

Wenn Sie aufrufen AddDriverContent, geben Sie eine Reihe von Paketquellspeicherorten an. In der Regel ist dies die objekteigenschaft SMS_Driver Server WMI ClassContentSourcePath, sie kann jedoch überschrieben werden, wenn der Anbieter keinen Zugriff auf den ursprünglichen Quellspeicherort hat.

So erstellen Sie ein Treiberpaket und fügen Treiberinhalte 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. Committen Sie das SMS_DriverPackage Objekt.

  5. Rufen Sie das -Objekt ab SMS_DriverPackage .

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

  7. Fügen Sie die Liste der Quellpfade des Treiberinhalts in die AddDriverContent -Methode ContentSourcePath im -Parameter ein.

  8. Rufen Sie die -Methode auf AddDriverContent .

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

  10. Weisen Sie das Treiberpaket einem Verteilungspunkt zu. Weitere Informationen finden Sie unter Zuweisen eines Pakets zu einem Verteilungspunkt.

Beispiel

Die folgende Beispielmethode erstellt ein Paket für einen angegebenen Treiberbezeichner, dargestellt durch die CI_ID -Eigenschaft des SMS_Driver Server WMI Class-Objekts . Die -Methode verwendet auch einen neuen Paketnamen, eine neue Beschreibung und einen neuen 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 verfügt über die folgenden Parameter:

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

Kompilieren des Codes

Für dieses C#-Beispiel ist Folgendes erforderlich:

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 Schützen Configuration Manager Anwendungen finden Sie unter Configuration Manager rollenbasierte Verwaltung.

Siehe auch

WMI-Klasse des SMS_Driver-Servers
AddDriverContent-Methode in class SMS_DriverPackage