Megosztás a következőn keresztül:


Illesztőprogram-csomag létrehozása Windows-illesztőprogramhoz a Configuration Manager

Az operációs rendszer központi telepítési illesztőprogramjának csomagja Configuration Manager egy SMS_DriverPackage kiszolgálói WMI-osztályobjektum létrehozásával hozható létre. Ha hozzá szeretne adni egy illesztőprogramot a csomaghoz, hívja meg az AddDriverContent metódust a Class SMS_DriverPackage.

Az illesztőprogram-csomagok az illesztőprogramokhoz társított tartalmak tárolására szolgálnak. Illesztőprogram-csomag létrehozásakor a forráshelynek kezdetben üres megosztásnak kell lennie, amelyhez az SMS-szolgáltató olvasási és írási hozzáféréssel rendelkezik. Amikor hozzáad egy illesztőprogramot egy illesztőprogram-csomaghoz a használatával AddDriverContent, az SMS-szolgáltató átmásolja a tartalmat az illesztőprogram forráshelyéről az illesztőprogram-csomagmegosztás egyik alkönyvtárára.

Az illesztőprogramhoz társított tartalmat hozzá kell adni egy illesztőprogram-csomaghoz, és hozzá kell rendelni egy terjesztési ponthoz, mielőtt az ügyfél használhatja. Az illesztőprogram tartalmát a SMS_CIToContent kiszolgálói WMI-osztály objektumból kapja, ahol a CI_ID tulajdonság megegyezik az illesztőprogram-azonosítóval.

Megjegyzés:

Több illesztőprogram is megoszthatja ugyanazt a tartalmat. Ez általában akkor fordul elő, ha ugyanabban a könyvtárban több .inf fájl található.

AddDriverContent segítségével egyszerre több illesztőprogramot is hozzáadhat egy csomaghoz. Ehhez adjon hozzá több tartalomazonosítót. A bRefreshDPs paramétert értékre false kell állítani, ha újabb hívásra kerül sor. Ez biztosítja, hogy a csomag csak egyszer frissül a terjesztési ponton.

A hívásakor AddDriverContentmeg kell adnia a csomag forráshelyeit. Ez általában a SMS_Driver kiszolgálói WMI-osztály objektumtulajdonság ContentSourcePath , de felül lehet bírálni, ha a szolgáltató nem rendelkezik hozzáféréssel az eredeti forráshelyhez.

Illesztőprogram-csomag létrehozása és illesztőprogram-tartalom hozzáadása

  1. Állítson be egy kapcsolatot az SMS-szolgáltatóval. További információ: Az SMS-szolgáltató alapjai.

  2. Hozzon létre egy SMS_DriverPackage objektumot.

  3. Állítsa az PkgSourceFlag objektum tulajdonságát a SMS_DriverPackage (Közvetlen tárolás) értékre 2 .

  4. Véglegesítse az SMS_DriverPackage objektumot.

  5. Az objektum lekérése SMS_DriverPackage .

  6. Helyezze el a csomaghoz hozzáadni kívánt illesztőprogramok listáját az AddDriverContent metódusban ContentIDs a paraméterben.

  7. Helyezze el az illesztőprogram-tartalom forrásútvonalainak listáját a metódusban ContentSourcePath a AddDriverContent paraméterben.

  8. Hívja meg a metódust AddDriverContent .

  9. Hívja meg a RefreshPkgSource metódust a SMS_DriverPackage osztályban a művelet befejezéséhez.

  10. Rendelje hozzá az illesztőprogram-csomagot egy terjesztési ponthoz. További információ: Csomag hozzárendelése terjesztési ponthoz.

Példa

Az alábbi példametódus létrehoz egy csomagot egy megadott illesztőprogram-azonosítóhoz, amelyet a CI_IDSMS_Driver kiszolgálói WMI-osztály objektum tulajdonsága jelöl. A metódus egy új csomagnevet, leírást és csomag forrásútvonalát is paraméterekként veszi fel.

Megjegyzés:

A packageSourcePath paramétert univerzális elnevezési konvenció (UNC) hálózati elérési útként kell megadni, például: \\localhost\Drivers\ATIVideo\.

A mintakód meghívásával kapcsolatos információkért lásd: Configuration Manager Kódrészletek hívása.

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

A példametódus a következő paraméterekkel rendelkezik:

Paraméter Típus Leírás
connection -Kezelt: WqlConnectionManager
- VBScript: SWbemServices
Érvényes kapcsolat az SMS-szolgáltatóval.
driverId -Kezelt: Integer
- VBScript: Integer
Az illesztőprogram azonosítója (SMS_Driver.CI_ID).
newPackageName -Kezelt: String
- VBScript: String
A csomag neve.
newPackageDescription -Kezelt: String
- VBScript: String
Az új csomag leírása.
newPackageSourcePath -Kezelt: String
- VBScript: String
Az illesztőprogram érvényes UNC hálózati elérési útja.

A kód fordítása

Ehhez a C#-példához a következőre van szükség:

Névterek

Rendszer

System.Collections.Generic

System.Text

System.IO

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Összeszerelés

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robusztus programozás

A hibakezeléssel kapcsolatos további információkért lásd: A Configuration Manager hibák ismertetése.

.NET-keretrendszer Security

A Configuration Manager alkalmazások biztonságossá tételével kapcsolatos további információkért lásd: Configuration Manager szerepköralapú felügyelet.

Lásd még

SMS_Driver kiszolgálói WMI-osztályAddDriverContent metódusa a SMS_DriverPackage