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_DriverPackage2 wartość (Bezpośredni magazyn).

  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:

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