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 -Spravované: WqlConnectionManager
- VBScript: SWbemServices
Platné připojení k poskytovateli serveru SMS.
driverId -Spravované: Integer
-Vbscript: Integer
Identifikátor ovladače (SMS_Driver.CI_ID).
newPackageName -Spravované: String
-Vbscript: String
Název balíčku.
newPackageDescription -Spravované: String
-Vbscript: String
Popis nového balíčku.
newPackageSourcePath -Spravované: 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ému

System.collections.generic

System.text

System.io

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Sestavení

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

Serverová třída služby WMI SMS_Driver
Metoda AddDriverContent v SMS_DriverPackage třídy