Jak utworzyć pakiet sterownika dla sterownika systemu Windows w Configuration Manager
Pakiet dla sterownika wdrażania systemu operacyjnego można utworzyć w Configuration Manager, tworząc obiekt klasy WMI serwera SMS_DriverPackage. Aby dodać sterownik do pakietu, należy wywołać metodę AddDriverContent w klasie SMS_DriverPackage.
Pakiety sterowników są używane do przechowywania zawartości skojarzonej ze sterownikami. Podczas tworzenia pakietu sterowników lokalizacja źródłowa powinna początkowo być pustym udziałem, do których dostawca programu SMS ma dostęp do odczytu i zapisu. Po dodaniu sterownika do pakietu sterowników przy użyciu AddDriverContent
programu dostawca programu SMS skopiuje zawartość z lokalizacji źródłowej sterownika do podkatalogu w udziale pakietów sterowników.
Należy dodać zawartość skojarzoną ze sterownikiem do pakietu sterowników i przypisać ją do punktu dystrybucji, zanim klient będzie mógł z niego korzystać. Zawartość sterownika jest pobierana z obiektu klasy WMI serwera SMS_CIToContent, gdzie CI_ID
właściwość jest zgodna z identyfikatorem sterownika.
Uwaga
Wiele sterowników może udostępniać tę samą zawartość. Zwykle dzieje się tak, gdy w tym samym katalogu znajduje się wiele plików inf.
AddDriverContent
Może służyć do dodawania wielu sterowników do pakietu jednocześnie. W tym celu dodaj wiele identyfikatorów zawartości. Parametr bRefreshDPs
powinien być ustawiony na false
wartość , jeśli zostanie wykonane kolejne wywołanie. Dzięki temu pakiet jest aktualizowany tylko raz w punkcie dystrybucji.
Podczas wywoływania AddDriverContent
polecenia należy określić zestaw lokalizacji źródłowych pakietów. Zazwyczaj jest to właściwość obiektu ContentSourcePath
klasy WMI serwera SMS_Driver, ale można ją zastąpić, jeśli dostawca nie ma dostępu do oryginalnej lokalizacji źródłowej.
Aby utworzyć pakiet sterowników i dodać zawartość sterownika
Skonfiguruj połączenie z dostawcą programu SMS. Aby uzyskać więcej informacji, zobacz Podstawy dostawcy programu SMS.
Utwórz obiekt SMS_DriverPackage .
Ustaw właściwość
PkgSourceFlag
obiektu naSMS_DriverPackage
2
wartość (Bezpośredni magazyn).SMS_DriverPackage
Zatwierdź obiekt.SMS_DriverPackage
Pobierz obiekt.Umieść listę sterowników, które chcesz dodać do pakietu w metodzie
ContentIDs
AddDriverContent w parametrze.Umieść listę ścieżek źródła zawartości sterownika w metodzie
AddDriverContent
ContentSourcePath
w parametrze.Wywołaj
AddDriverContent
metodę .Wywołaj metodę RefreshPkgSource w klasie SMS_DriverPackage , aby ukończyć operację.
Przypisz pakiet sterowników do punktu dystrybucji. Aby uzyskać więcej informacji, zobacz How to Assign a Package to a Distribution Point (Jak przypisać pakiet do punktu dystrybucji).
Przykład
Poniższa przykładowa metoda tworzy pakiet dla podanego identyfikatora sterownika reprezentowanego przez CI_ID
właściwość obiektu klasy WMI serwera SMS_Driver . Metoda przyjmuje również nową nazwę pakietu, opis i ścieżkę źródłową pakietu jako parametry.
Uwaga
Parametr packageSourcePath
musi być podany jako ścieżka sieciowa uniwersalnej konwencji nazewnictwa (UNC), na przykład \\localhost\Drivers\ATIVideo\.
Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz Wywoływanie fragmentów kodu 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;
}
}
Przykładowa metoda ma następujące parametry:
Parametr | Wpisać | Opis |
---|---|---|
connection |
-Zarządzane: WqlConnectionManager - VBScript: SWbemServices |
Prawidłowe połączenie z dostawcą programu SMS. |
driverId |
-Zarządzane: Integer -Vbscript: Integer |
Identyfikator sterownika (SMS_Driver.CI_ID ). |
newPackageName |
-Zarządzane: String -Vbscript: String |
Nazwa pakietu. |
newPackageDescription |
-Zarządzane: String -Vbscript: String |
Opis nowego pakietu. |
newPackageSourcePath |
-Zarządzane: String -Vbscript: String |
Prawidłowa ścieżka sieci UNC do sterownika. |
Kompilowanie kodu
Ten przykład języka C# wymaga:
Obszary nazw
System
System.collections.generic
System.text
System.io
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Zestawu
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Niezawodne programowanie
Aby uzyskać więcej informacji na temat obsługi błędów, zobacz Informacje o błędach Configuration Manager.
zabezpieczenia .NET Framework
Aby uzyskać więcej informacji na temat zabezpieczania aplikacji Configuration Manager, zobacz Configuration Manager administracja oparta na rolach.
Zobacz też
SMS_Driver Server WMI Class
AddDriverContent, metoda w klasie SMS_DriverPackage