Delen via


Een stuurprogrammapakket maken voor een Windows-stuurprogramma in Configuration Manager

U maakt in Configuration Manager een pakket voor een besturingssysteemimplementatiestuurprogramma door een WMI-klasseobject SMS_DriverPackage Server te maken. Als u een stuurprogramma aan het pakket wilt toevoegen, roept u de methode AddDriverContent aan in klasse SMS_DriverPackage.

Stuurprogrammapakketten worden gebruikt om de inhoud op te slaan die is gekoppeld aan stuurprogramma's. Bij het maken van een stuurprogrammapakket moet de bronlocatie in eerste instantie een lege share zijn waartoe de SMS-provider lees- en schrijftoegang heeft. Wanneer een stuurprogramma wordt toegevoegd aan een stuurprogrammapakket met behulp van AddDriverContent, kopieert de SMS-provider de inhoud van de bronlocatie van het stuurprogramma naar een submap in de stuurprogrammapakketshare.

Het is noodzakelijk om de inhoud die is gekoppeld aan een stuurprogramma toe te voegen aan een stuurprogrammapakket en deze toe te wijzen aan een distributiepunt voordat de client deze kan gebruiken. U haalt de inhoud van het stuurprogramma op van het WMI-klasseobject SMS_CIToContent Server waarbij de CI_ID eigenschap overeenkomt met de stuurprogramma-id.

Opmerking

Het is mogelijk dat meerdere stuurprogramma's dezelfde inhoud delen. Dit gebeurt meestal wanneer er meerdere .inf-bestanden in dezelfde map zijn.

AddDriverContent kan worden gebruikt om meerdere stuurprogramma's tegelijk aan een pakket toe te voegen. Voeg hiervoor meerdere inhouds-id's toe. De bRefreshDPs parameter moet worden ingesteld op false als er een andere aanroep wordt gedaan. Dit zorgt ervoor dat het pakket slechts eenmaal wordt bijgewerkt op het distributiepunt.

Wanneer u aanroept AddDriverContent, geeft u een set pakketbronlocaties op. Meestal is dit de eigenschap WMI-klasseobjectContentSourcePath SMS_Driver Server, maar deze kan worden overschreven als de provider geen toegang heeft tot de oorspronkelijke bronlocatie.

Een stuurprogrammapakket maken en stuurprogramma-inhoud toevoegen

  1. Een verbinding met de SMS-provider instellen. Zie Basisprincipes van SMS-provider voor meer informatie.

  2. Maak een SMS_DriverPackage-object .

  3. Stel de PkgSourceFlag eigenschap van het SMS_DriverPackage object in op 2 (Storage Direct).

  4. Voer het object door SMS_DriverPackage .

  5. Haal het object op SMS_DriverPackage .

  6. Plaats de lijst met stuurprogramma's die u wilt toevoegen aan het pakket in de methode ContentIDsAddDriverContent in parameter.

  7. Plaats de lijst met bronpaden voor stuurprogramma-inhoud in de AddDriverContent methode ContentSourcePath in parameter.

  8. Roep de methode aan AddDriverContent .

  9. Roep de methode RefreshPkgSource aan in klasse SMS_DriverPackage om de bewerking te voltooien.

  10. Wijs het stuurprogrammapakket toe aan een distributiepunt. Zie Een pakket toewijzen aan een distributiepunt voor meer informatie.

Voorbeeld

Met de volgende voorbeeldmethode wordt een pakket gemaakt voor een opgegeven stuurprogramma-id, vertegenwoordigd door de CI_ID eigenschap van het WMI-klasseobject SMS_Driver Server . De methode gebruikt ook een nieuwe pakketnaam, beschrijving en pakketbronpad als parameters.

Opmerking

De packageSourcePath parameter moet worden opgegeven als een UNC-netwerkpad (Universal Naming Convention), bijvoorbeeld \\localhost\Drivers\ATIVideo\.

Zie Aanroepen Configuration Manager codefragmenten voor meer informatie over het aanroepen van de voorbeeldcode.

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

De voorbeeldmethode heeft de volgende parameters:

Parameter Type Beschrijving
connection -Beheerd: WqlConnectionManager
- VBScript: SWbemServices
Een geldige verbinding met de SMS-provider.
driverId -Beheerd: Integer
-Vbscript: Integer
De stuurprogramma-id (SMS_Driver.CI_ID).
newPackageName -Beheerd: String
-Vbscript: String
De naam van het pakket.
newPackageDescription -Beheerd: String
-Vbscript: String
Een beschrijving voor het nieuwe pakket.
newPackageSourcePath -Beheerd: String
-Vbscript: String
Een geldig UNC-netwerkpad naar het stuurprogramma.

De code compileren

Voor dit C#-voorbeeld is het volgende vereist:

Naamruimten

Systeem

System.Collections.Generic

System.Text

System.IO

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Vergadering

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robuust programmeren

Zie Over Configuration Manager fouten voor meer informatie over foutafhandeling.

.NET Framework Beveiliging

Zie Configuration Manager op rollen gebaseerd beheer voor meer informatie over het beveiligen van Configuration Manager toepassingen.

Zie ook

WMI-klasse SMS_Driver-server
Methode AddDriverContent in klasse SMS_DriverPackage