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 AddDriverContent
de , 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 ContentSourcePath
classe 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
Configurez une connexion au fournisseur SMS. Pour plus d’informations, consultez Notions de base du fournisseur SMS.
Créez un objet SMS_DriverPackage .
Définissez la
PkgSourceFlag
propriété de l’objet surSMS_DriverPackage
2
(Stockage direct).Commitez l’objet
SMS_DriverPackage
.Obtient l’objet
SMS_DriverPackage
.Placez la liste des pilotes que vous souhaitez ajouter au package dans la méthode
ContentIDs
AddDriverContent dans le paramètre .Placez la liste des chemins d’accès à la source de contenu du pilote dans la
AddDriverContent
méthodeContentSourcePath
dans le paramètre .Appelez la
AddDriverContent
méthode .Appelez la méthode RefreshPkgSource dans la classe SMS_DriverPackage pour terminer l’opération.
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