Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie erstellen ein Paket für einen Treiber für die Betriebssystembereitstellung in Configuration Manager, indem Sie ein Objekt der SMS_DriverPackage Server WMI-Klasse erstellen. Um dem Paket einen Treiber hinzuzufügen, rufen Sie die AddDriverContent-Methode in Klasse SMS_DriverPackage auf.
Treiberpakete werden verwendet, um den mit Treibern verknüpften Inhalt zu speichern. Beim Erstellen eines Treiberpakets sollte der Quellspeicherort zunächst eine leere Freigabe sein, auf die der SMS-Anbieter über Lese- und Schreibzugriff verfügt. Wenn einem Treiberpaket ein Treiber hinzugefügt wird, AddDriverContentkopiert der SMS-Anbieter den Inhalt vom Quellspeicherort des Treibers in ein Unterverzeichnis in der Treiberpaketfreigabe.
Der Inhalt, der einem Treiber zugeordnet ist, muss einem Treiberpaket hinzugefügt und einem Verteilungspunkt zugewiesen werden, bevor der Client ihn verwenden kann. Sie erhalten den Treiberinhalt aus dem SMS_CIToContent Server WMI-Klassenobjekt , wobei die CI_ID Eigenschaft mit der Treiber-ID übereinstimmt.
Hinweis
Es ist möglich, dass mehrere Treiber denselben Inhalt teilen. Dies geschieht in der Regel, wenn sich mehrere INF-Dateien im selben Verzeichnis befinden.
AddDriverContent Kann verwendet werden, um mehrere Treiber gleichzeitig zu einem Paket hinzuzufügen. Fügen Sie hierzu mehrere Inhalts-IDs hinzu. Der bRefreshDPs Parameter sollte festgelegt werden, wenn false ein weiterer Aufruf erfolgt. Dadurch wird sichergestellt, dass das Paket auf dem Verteilungspunkt nur einmal aktualisiert wird.
Wenn Sie AddDriverContentaufrufen, geben Sie eine Reihe von Paketquellspeicherorten an. In der Regel handelt es sich dabei um die Objekteigenschaft SMS_Driver Server WMI ClassContentSourcePath, die jedoch überschrieben werden kann, wenn der Anbieter keinen Zugriff auf den ursprünglichen Quellspeicherort hat.
So erstellen Sie ein Treiberpaket und fügen Treiberinhalt hinzu
Richten Sie eine Verbindung mit dem SMS-Anbieter ein. Weitere Informationen finden Sie unter Grundlagen des SMS-Anbieters.
Erstellen Sie ein SMS_DriverPackage Objekt.
Legen Sie die
PkgSourceFlagEigenschaft desSMS_DriverPackageObjekts auf2(Storage Direct) fest.Führen Sie einen Commit für das
SMS_DriverPackageObjekt durch.Holen Sie sich das
SMS_DriverPackageObjekt.Fügen Sie die Liste der Treiber, die Sie dem Paket hinzufügen möchten, in die AddDriverContent-Methode
ContentIDsim Parameter ein.Fügen Sie die Liste der Treiberinhaltsquellpfade in die
AddDriverContentMethodeContentSourcePathim Parameter ein.Aufrufen der
AddDriverContentMethode.Rufen Sie die RefreshPkgSource-Methode in Klasse SMS_DriverPackage auf, um den Vorgang abzuschließen.
Weisen Sie das Treiberpaket einem Verteilungspunkt zu. Weitere Informationen finden Sie unter So weisen Sie einem Verteilungspunkt ein Paket zu.
Beispiel
Die folgende Beispielmethode erstellt ein Paket für eine bereitgestellte Treiber-ID, die durch die CI_ID Eigenschaft des SMS_Driver Server WMI-Klassenobjekts dargestellt wird. Die Methode akzeptiert auch einen neuen Paketnamen, eine neue Beschreibung und einen Paketquellpfad als Parameter.
Hinweis
Der packageSourcePath Parameter muss als UNC-Netzwerkpfad (Universal Naming Convention) angegeben werden, z. B. \\localhost\Drivers\ATIVideo\.
Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen von Configuration Manager-Codeausschnitten.
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;
}
}
Die Beispielmethode hat die folgenden Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
connection |
- Verwaltet: WqlConnectionManager- VBScript: SWbemDienste |
Eine gültige Verbindung mit dem SMS-Anbieter. |
driverId |
- Verwaltet: Integer- VBScript: Integer |
Die Treiber-ID (SMS_Driver.CI_ID). |
newPackageName |
- Verwaltet: String- VBScript: String |
Der Name für das Paket. |
newPackageDescription |
- Verwaltet: String- VBScript: String |
Eine Beschreibung für das neue Paket. |
newPackageSourcePath |
- Verwaltet: String- VBScript: String |
Ein gültiger UNC-Netzwerkpfad zum Treiber. |
Kompilieren des Codes
Dieses C#-Beispiel erfordert:
Namespaces
System
System.Collections.Generic
System.Text
System.IO
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assembly
Microsoft.ConfigurationManagement.ManagementProvider
adminui.wqlqueryengine
Robuste Programmierung
Weitere Informationen zur Fehlerbehandlung finden Sie unter Informationen zu Configuration Manager-Fehlern.
.NET Framework-Sicherheit
Weitere Informationen zum Sichern von Configuration Manager-Anwendungen finden Sie unter rollenbasierte Verwaltung von Configuration Manager.
Siehe auch
SMS_Driver Server WMI-KlasseAddDriverContent-Methode in Klasse SMS_DriverPackage