Partager via


Comment créer un package de pilotes pour un pilote Windows dans Configuration Manager

Vous créez un package pour un pilote de déploiement de système d’exploitation, dans Configuration Manager, en créant un objet SMS_DriverPackage Server WMI Class. Pour ajouter un pilote au package, vous appelez la méthode AddDriverContent dans class SMS_DriverPackage.

Les packages de pilotes sont utilisés pour stocker le contenu associé aux pilotes. Lors de la création d’un package de pilotes, l’emplacement source doit initialement être un partage vide auquel le fournisseur SMS dispose d’un accès en lecture et en écriture. Lorsqu’un pilote est ajouté à un package de pilotes, à l’aide AddDriverContentde , le fournisseur SMS copie le contenu de l’emplacement source du pilote dans un sous-répertoire du partage de package de pilotes.

Il est nécessaire d’ajouter le contenu associé à un pilote à un package de pilotes et de l’affecter à un point de distribution avant que le client puisse l’utiliser. Vous obtenez le contenu du pilote à partir de l’objet classe WMI SMS_CIToContent Server où la CI_ID propriété correspond à l’identificateur du pilote.

Remarque

Il est possible que plusieurs pilotes partagent le même contenu. Cela se produit généralement lorsqu’il existe plusieurs fichiers .inf dans le même répertoire.

AddDriverContent peut être utilisé pour ajouter simultanément plusieurs pilotes à un package. Pour ce faire, ajoutez plusieurs ID de contenu. Le bRefreshDPs paramètre doit être défini sur false si un autre appel doit être effectué. Cela garantit que le package n’est mis à jour qu’une seule fois sur le point de distribution.

Lorsque vous appelez AddDriverContent, vous spécifiez un ensemble d’emplacements sources de package. Il s’agit généralement de la propriété d’objet ContentSourcePathclasse WMI du serveur SMS_Driver, mais elle peut être remplacée si le fournisseur n’a pas accès à l’emplacement source d’origine.

Pour créer un package de pilotes et ajouter du contenu de pilote

  1. Configurez une connexion au fournisseur SMS. Pour plus d’informations, consultez Notions de base du fournisseur SMS.

  2. Créez un objet SMS_DriverPackage .

  3. Définissez la PkgSourceFlag propriété de l’objet sur SMS_DriverPackage2 (Stockage direct).

  4. Commitez l’objet SMS_DriverPackage .

  5. Obtient l’objet SMS_DriverPackage .

  6. Placez la liste des pilotes que vous souhaitez ajouter au package dans la méthode ContentIDsAddDriverContent dans le paramètre .

  7. Placez la liste des chemins d’accès à la source de contenu du pilote dans la AddDriverContent méthode ContentSourcePath dans le paramètre .

  8. Appelez la AddDriverContent méthode .

  9. Appelez la méthode RefreshPkgSource dans la classe SMS_DriverPackage pour terminer l’opération.

  10. Affectez le package de pilotes à un point de distribution. Pour plus d’informations, consultez Comment affecter un package à un point de distribution.

Exemple

L’exemple de méthode suivant crée un package pour un identificateur de pilote fourni, représenté par la CI_ID propriété de l’objet classe WMI SMS_Driver Server . La méthode prend également un nouveau nom de package, une description et un nouveau chemin d’accès source du package en tant que paramètres.

Remarque

Le packageSourcePath paramètre doit être fourni en tant que chemin réseau UNC (Universal Naming Convention), par exemple, \\localhost\Drivers\ATIVideo\.

Pour plus d’informations sur l’appel de l’exemple de code, consultez Appel d’extraits de code 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;  
    }  
}  

L’exemple de méthode a les paramètres suivants :

Paramètre Type Description
connection -Géré: WqlConnectionManager
- VBScript : SWbemServices
Connexion valide au fournisseur SMS.
driverId -Géré: Integer
-Vbscript: Integer
Identificateur du pilote (SMS_Driver.CI_ID).
newPackageName -Géré: String
-Vbscript: String
Nom du package.
newPackageDescription -Géré: String
-Vbscript: String
Description du nouveau package.
newPackageSourcePath -Géré: String
-Vbscript: String
Chemin d’accès réseau UNC valide au pilote.

Compilation du code

Cet exemple C# nécessite :

Espaces de noms

Système

System.Collections.Generic

System.Text

System.io

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programmation robuste

Pour plus d’informations sur la gestion des erreurs, consultez À propos des erreurs Configuration Manager.

Sécurité de .NET Framework

Pour plus d’informations sur la sécurisation des applications Configuration Manager, consultez Configuration Manager’administration basée sur les rôles.

Voir aussi

Classe WMI du serveur SMS_Driver
Méthode AddDriverContent dans la classe SMS_DriverPackage