Dela via


Skapa ett drivrutinspaket för en Windows-drivrutin i Configuration Manager

Du skapar ett paket för en drivrutin för operativsystemdistribution i Configuration Manager genom att skapa ett SMS_DriverPackage WMI-klassobjekt för servern. Om du vill lägga till en drivrutin i paketet anropar du metoden AddDriverContent i Class SMS_DriverPackage.

Drivrutinspaket används för att lagra det innehåll som är associerat med drivrutiner. När du skapar ett drivrutinspaket bör källplatsen till en början vara en tom resurs som SMS-providern har läs- och skrivåtkomst till. När en drivrutin läggs till i ett drivrutinspaket, med hjälp av AddDriverContent, kopierar SMS-providern innehållet från drivrutinskällans plats till en underkatalog i drivrutinspaketresursen.

Det är nödvändigt att lägga till det innehåll som är associerat med en drivrutin till ett drivrutinspaket och tilldela det till en distributionsplats innan klienten kan använda det. Du hämtar drivrutinsinnehållet från objektet SMS_CIToContent Server WMI-klass där CI_ID egenskapen matchar drivrutinsidentifieraren.

Obs!

Det är möjligt för flera drivrutiner att dela samma innehåll. Detta inträffar vanligtvis när det finns flera .inf-filer i samma katalog.

AddDriverContent kan användas för att lägga till flera drivrutiner i ett paket samtidigt. Det gör du genom att lägga till flera innehålls-ID:t. Parametern bRefreshDPs ska anges till false om ett annat anrop görs. Detta säkerställer att paketet bara uppdateras på distributionsplatsen en gång.

När du anropar AddDriverContentanger du en uppsättning paketkällaplatser. Detta är vanligtvis objektegenskapen SMS_Driver Server WMI-klassContentSourcePath, men den kan åsidosättas om providern inte har åtkomst till den ursprungliga källplatsen.

Skapa ett drivrutinspaket och lägga till drivrutinsinnehåll

  1. Konfigurera en anslutning till SMS-providern. Mer information finns i grunderna för SMS-provider.

  2. Skapa ett SMS_DriverPackage objekt.

  3. PkgSourceFlag Ange egenskapen för objektet SMS_DriverPackage till 2 (Lagringsdirigering).

  4. Checka in objektet SMS_DriverPackage .

  5. Hämta objektet SMS_DriverPackage .

  6. Placera listan över drivrutiner som du vill lägga till i paketet i metoden ContentIDsAddDriverContent i parametern .

  7. Placera listan över källsökvägar för drivrutinsinnehåll i AddDriverContent -metoden ContentSourcePath i parametern .

  8. AddDriverContent Anropa metoden .

  9. Anropa metoden RefreshPkgSource i klass SMS_DriverPackage för att slutföra åtgärden.

  10. Tilldela drivrutinspaketet till en distributionsplats. Mer information finns i Tilldela ett paket till en distributionsplats.

Exempel

Följande exempelmetod skapar ett paket för en angiven drivrutinsidentifierare som representeras av CI_ID egenskapen för objektet SMS_Driver Server WMI-klass . Metoden tar också ett nytt paketnamn, en beskrivning och en paketkälla som parametrar.

Obs!

Parametern packageSourcePath måste anges som en UNC-nätverkssökväg (Universal Naming Convention), till exempel \\localhost\Drivers\ATIVideo\.

Information om hur du anropar exempelkoden finns i Anropa Configuration Manager kodfragment.

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

Exempelmetoden har följande parametrar:

Parameter Typ Beskrivning
connection -Hanterade: WqlConnectionManager
– VBScript: SWbemServices
En giltig anslutning till SMS-providern.
driverId -Hanterade: Integer
-Vbscript: Integer
Drivrutinsidentifieraren (SMS_Driver.CI_ID).
newPackageName -Hanterade: String
-Vbscript: String
Namnet på paketet.
newPackageDescription -Hanterade: String
-Vbscript: String
En beskrivning av det nya paketet.
newPackageSourcePath -Hanterade: String
-Vbscript: String
En giltig UNC-nätverkssökväg till drivrutinen.

Kompilera koden

Det här C#-exemplet kräver:

Namnområden

System

System.Collections.Generic

System.Text

System.io

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Församlingen

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robust programmering

Mer information om felhantering finns i Om Configuration Manager fel.

.NET Framework Säkerhet

Mer information om hur du skyddar Configuration Manager program finns i Configuration Manager rollbaserad administration.

Se även

SMS_Driver serverns WMI-klass
AddDriverContent-metod i klass SMS_DriverPackage