Sdílet prostřednictvím


Vytvoření balíčku ovladače pro ovladač systému Windows v Configuration Manager

Balíček pro ovladač nasazení operačního systému vytvoříte v Configuration Manager vytvořením objektu třídy WMI serveru SMS_DriverPackage Server. Pokud chcete do balíčku přidat ovladač, zavolejte metodu AddDriverContent v SMS_DriverPackage třídy.

Balíčky ovladačů se používají k ukládání obsahu přidruženého k ovladačům. Při vytváření balíčku ovladačů by zdrojovým umístěním měla být zpočátku prázdná sdílená složka, ke které má poskytovatel serveru SMS přístup ke čtení a zápisu. Při přidání ovladače do balíčku ovladačů pomocí AddDriverContentnástroje zkopíruje poskytovatel serveru SMS obsah ze zdrojového umístění ovladače do podadresáře ve sdílené složce balíčku ovladače.

Obsah přidružený k ovladači je nutné přidat do balíčku ovladače a přiřadit ho distribučnímu bodu, aby ho klient mohl použít. Obsah ovladače získáte z objektu třídy služby WMI serveru SMS_CIToContent, kde CI_ID vlastnost odpovídá identifikátoru ovladače.

Poznámka

Stejný obsah může sdílet více ovladačů. K tomu obvykle dochází v případě, že je ve stejném adresáři více souborů .inf.

AddDriverContent lze použít k přidání více ovladačů do balíčku současně. Uděláte to tak, že přidáte několik ID obsahu. Parametr bRefreshDPs by měl být nastaven na false hodnotu , pokud se provede další volání. Tím se zajistí, že se balíček v distribučním bodě aktualizuje jenom jednou.

Při volání zadáte AddDriverContentsadu zdrojových umístění balíčků. Obvykle se jedná o vlastnost objektuContentSourcePath třídy služby WMI serveru SMS_Driver, ale pokud zprostředkovatel nemá přístup k původnímu zdrojovému umístění, může být přepsána.

Vytvoření balíčku ovladače a přidání obsahu ovladače

  1. Nastavte připojení k poskytovateli serveru SMS. Další informace najdete v tématu Základy poskytovatele serveru SMS.

  2. Vytvořte objekt SMS_DriverPackage .

  3. Nastavte PkgSourceFlag vlastnost objektu SMS_DriverPackage na 2 (Storage Direct).

  4. Potvrďte SMS_DriverPackage objekt.

  5. SMS_DriverPackage Získejte objekt.

  6. Do metody ContentIDsAddDriverContent v parametru vložte seznam ovladačů, které chcete přidat do balíčku.

  7. Do parametru vložte seznam cest ke zdroji obsahu ovladače v AddDriverContent metodě ContentSourcePath .

  8. Zavolejte metodu AddDriverContent .

  9. K dokončení operace zavolejte metodu RefreshPkgSource ve třídě SMS_DriverPackage .

  10. Přiřaďte balíček ovladače k distribučnímu bodu. Další informace najdete v tématu Přiřazení balíčku k distribučnímu bodu.

Příklad

Následující ukázková metoda vytvoří balíček pro zadaný identifikátor ovladače reprezentovaný CI_ID vlastností objektu SMS_Driver Server WMI Class . Metoda také přebírá nový název balíčku, popis a cestu ke zdroji balíčku jako parametry.

Poznámka

Parametr packageSourcePath musí být zadán jako síťová cesta UNC (Universal Naming Convention), například \\localhost\Drivers\ATIVideo\.

Informace o volání ukázkového kódu najdete v tématu Volání Configuration Manager fragmentů kódu.

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;
    }
}

Ukázková metoda má následující parametry:

Parametr Typ Popis
connection -Řízen: WqlConnectionManager
- VBScript: SWbemServices
Platné připojení k poskytovateli serveru SMS.
driverId -Řízen: Integer
- VBScript: Integer
Identifikátor ovladače (SMS_Driver.CI_ID).
newPackageName -Řízen: String
- VBScript: String
Název balíčku.
newPackageDescription -Řízen: String
- VBScript: String
Popis nového balíčku.
newPackageSourcePath -Řízen: String
- VBScript: String
Platná síťová cesta UNC k ovladači.

Kompilace kódu

Tento příklad jazyka C# vyžaduje:

Obory názvů

Systém

System.Collections.Generic

System.Text

System.IO

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Shromáždění

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robustní programování

Další informace o zpracování chyb najdete v tématu Informace o chybách Configuration Manager.

Zabezpečení rozhraní .NET Framework

Další informace o zabezpečení Configuration Manager aplikací najdete v tématu Configuration Manager správa na základě rolí.

Viz taky

metoda SMS_Driver serverové třídy služby WMIAddDriverContent ve třídě SMS_DriverPackage