Udostępnij przez


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 AddDriverContentprogramu 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 AddDriverContentpolecenia należy określić zestaw lokalizacji źródłowych pakietów. Zazwyczaj jest to właściwość obiektu ContentSourcePathklasy 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

  1. Skonfiguruj połączenie z dostawcą programu SMS. Aby uzyskać więcej informacji, zobacz Podstawy dostawcy programu SMS.

  2. Utwórz obiekt SMS_DriverPackage .

  3. Ustaw właściwość PkgSourceFlag obiektu na SMS_DriverPackage (Bezpośrednie miejsce do 2 magazynowania).

  4. SMS_DriverPackage Zatwierdź obiekt.

  5. SMS_DriverPackage Pobierz obiekt.

  6. Umieść listę sterowników, które chcesz dodać do pakietu w metodzie ContentIDsAddDriverContent w parametrze.

  7. Umieść listę ścieżek źródła zawartości sterownika w metodzie AddDriverContentContentSourcePath w parametrze.

  8. Wywołaj AddDriverContent metodę .

  9. Wywołaj metodę RefreshPkgSource w klasie SMS_DriverPackage , aby ukończyć operację.

  10. 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:

Przestrzenie nazw

System

System.Collections.Generic

System.Text

System.IO

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Montaż

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 ClassAddDriverContent Method in Class SMS_DriverPackage