Come creare un pacchetto driver per un driver Windows in Configuration Manager

Un pacchetto per un driver di distribuzione del sistema operativo viene creato in Configuration Manager mediante la creazione di un oggetto classe WMI del server SMS_DriverPackage. Per aggiungere un driver al pacchetto, chiamare il metodo AddDriverContent nella classe SMS_DriverPackage.

I pacchetti driver vengono usati per archiviare il contenuto associato ai driver. Quando si crea un pacchetto driver, il percorso di origine deve essere inizialmente una condivisione vuota a cui il provider SMS ha accesso in lettura e scrittura. Quando un driver viene aggiunto a un pacchetto driver, utilizzando AddDriverContent, il provider SMS copierà il contenuto dal percorso di origine del driver a una sottodirectory nella condivisione del pacchetto driver.

È necessario aggiungere il contenuto associato a un driver a un pacchetto driver e assegnarlo a un punto di distribuzione prima che il client possa usarlo. Si ottiene il contenuto del driver dall'oggetto classe WMI del server SMS_CIToContent in cui la CI_ID proprietà corrisponde all'identificatore del driver.

Nota

È possibile che più driver condividano lo stesso contenuto. Ciò si verifica in genere quando sono presenti più file INF nella stessa directory.

AddDriverContent Può essere usato per aggiungere più driver contemporaneamente a un pacchetto. A tale scopo, aggiungi più ID contenuto. Il bRefreshDPs parametro deve essere impostato su false se verrà effettuata un'altra chiamata. In questo modo si garantisce che il pacchetto venga aggiornato nel punto di distribuzione una sola volta.

Quando si chiama AddDriverContent, si specifica un set di percorsi di origine del pacchetto. In genere si tratta della proprietà dell'oggetto ContentSourcePathclasse WMI del server SMS_Driver, ma può essere ignorata se il provider non ha accesso al percorso di origine originale.

Per creare un pacchetto driver e aggiungere il contenuto del driver

  1. Configurare una connessione al provider SMS. Per altre informazioni, vedere Nozioni fondamentali sul provider SMS.

  2. Creare un oggetto SMS_DriverPackage .

  3. Imposta la PkgSourceFlag proprietà dell'oggetto SMS_DriverPackage su 2 (Archiviazione diretta).

  4. Esegui il commit dell'oggetto SMS_DriverPackage .

  5. Ottieni l'oggetto SMS_DriverPackage .

  6. Inserire l'elenco dei driver da aggiungere al pacchetto nel metodo ContentIDsAddDriverContent nel parametro.

  7. Inserire l'elenco dei percorsi dell'origine AddDriverContent del contenuto del driver nel metodo ContentSourcePath nel parametro.

  8. Chiamare il AddDriverContent metodo.

  9. Chiamare il metodo RefreshPkgSource nella classe SMS_DriverPackage per completare l'operazione.

  10. Assegnare il pacchetto driver a un punto di distribuzione. Per altre informazioni, vedere Come assegnare un pacchetto a un punto di distribuzione.

Esempio

Il metodo di esempio seguente crea un pacchetto per un identificatore del driver fornito, rappresentato dalla CI_ID proprietà dell'oggetto SMS_Driver Server WMI Class . Il metodo accetta anche un nuovo nome di pacchetto, una descrizione e un nuovo percorso di origine del pacchetto come parametri.

Nota

Il packageSourcePath parametro deve essere fornito come percorso di rete UNC (Universal Naming Convention), ad esempio \\localhost\Drivers\ATIVideo\.

Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice di Configuration Manager.

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

Il metodo di esempio include i parametri seguenti:

Parametro Tipo Descrizione
connection - Gestito: WqlConnectionManager
- VBScript: SWbemServices
Una connessione valida al provider SMS.
driverId - Gestito: Integer
- VBScript: Integer
L'identificatore del driver (SMS_Driver.CI_ID).
newPackageName - Gestito: String
- VBScript: String
Nome del pacchetto.
newPackageDescription - Gestito: String
- VBScript: String
Descrizione per il nuovo pacchetto.
newPackageSourcePath - Gestito: String
- VBScript: String
Percorso di rete UNC valido per il driver.

Compilazione del codice

Questo esempio di C# richiede:

Spazi dei nomi

Sistema

System.Collections.Generic

System.Text

System.IO

Microsoft.ConfigurationManagementManagementProvider

Microsoft.ConfigurationManagementManagementProvider.WqlQueryEngine

Assembly

Microsoft.ConfigurationManagement.ManagementProvider

adminui.wqlqueryengine

Programmazione efficiente

Per altre informazioni sulla gestione degli errori, vedere Informazioni sugli errori di Configuration Manager.

Sicurezza di .NET Framework

Per altre informazioni sulla protezione delle applicazioni di Configuration Manager, vedere Amministrazione basata sui ruoli di Configuration Manager.

Vedere anche

Metodo AddDriverContent della classe WMI del server SMS_Drivernella classe SMS_DriverPackage