Importieren eines von einer Txtsetup.oem-Datei beschriebenen Windows-Treibers in Configuration Manager
Sie können einen Windows-Treiber importieren, der von einer Txtsetup.oem-Datei in Configuration Manager beschrieben wird, indem Sie die CreateFromOEM-Methode in Class SMS_Driver verwenden. Configuration Manager können automatisch Definitionen für die meisten Treiber aus einer INF-Datei erstellen. Bei der Installation von Massenspeichertreibern unter Betriebssystemen vor Windows Vista müssen Configuration Manager jedoch auch einige Informationen enthalten, die in der Datei Txtsetup.oem enthalten sind. Um dies zu erleichtern, CreateFromOEM
erstellt SMS_Driver Server WMI Class-Objekte für jede INF-Datei, auf die in der Datei Txtsetup.oem verwiesen wird. Anschließend haben Sie die Möglichkeit, die Treibereigenschaften anzupassen, bevor Sie sie speichern.
Hinweis
Wenn ein Treiberhersteller eine Txtsetup.oem-Datei bereitgestellt hat, sollten Sie den Treiber mithilfe dieses Verfahrens anstelle der INF-Dateien importieren, wenn Sie Windows 2000, Windows XP oder Windows Server 2003 bereitstellen möchten.
So importieren Sie einen Windows-Treiber
Richten Sie eine Verbindung mit dem SMS-Anbieter ein. Weitere Informationen finden Sie unter Grundlagen des SMS-Anbieters.
Rufen Sie die SMS_Driver Klasse CreateFromOEM-Methode auf, um eine Auflistung von Verwaltungsbasisobjekten abzurufen.
Erstellen Sie für die Verwaltungsbasisobjekte ein SMS_Driver -Objekt für jeden Treiber.
Füllen Sie das SMS_Driver-Objekt auf.
Committen Sie das SMS_Driver-Objekt.
Beispiel
Die folgende Beispielmethode erstellt ein SMS_Driver-Objekt für einen Windows-Treiber unter Verwendung des angegebenen Pfads und des Dateinamens Txtsetup.oem. Das Beispiel aktiviert auch den Treiber, indem der Wert der IsEnabled-Eigenschaft auf true
festgelegt wird. Die Hilfsfunktion GetDriverName
wird verwendet, um den Namen des Treibers aus der Treiberpaket-XML abzurufen.
Hinweis
Der path
Parameter muss als UNC-Netzwerkpfad (Universal Naming Convention) angegeben werden, z. B. \\localhost\Drivers\VMSCSI\.
Im Beispiel ist die LocaleID
Eigenschaft in Englisch (USA) hartcodiert. Wenn Sie das Gebietsschema für Nicht-USA benötigen -Installationen können Sie sie über die Eigenschaft SMS_Identification Server-WMI-KlasseLocaleID
abrufen.
Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen von Configuration Manager Codeausschnitten.
Sub ImportOemDriver(connection,path,name)
Dim inParams
Dim outParams
Dim driver
Dim driverClass
On Error Resume Next
Set driverClass = connection.Get("SMS_Driver")
Set inParams = driverClass.Methods_("CreateFromOEM").inParameters.SpawnInstance_()
' Set the driver path and INF file.
inParams.Properties_.item("DriverPath") = path
inParams.Properties_.item("OEMFile") = name
' Execute the method.
Set outParams = driverClass.ExecMethod_("CreateFromOEM", inParams)
If Err <> 0 Then
Wscript.Echo "Failed to import driver: " + path +"\" + name
Exit Sub
End If
For Each driver In outParams.Drivers
' Set driver name and enable the driver.
Dim LocalizedSettings
LocalizedSettings = array(0)
Set LocalizedSettings(0) = connection.Get("SMS_CI_LocalizedProperties").SpawnInstance_()
LocalizedSettings(0).Properties_.item("LocaleID") = 1033
LocalizedSettings(0).Properties_.item("DisplayName") = _
GetDriverName(driver.Properties_.item("SDMPackageXML"), "//DisplayName", "Text")
LocalizedSettings(0).Properties_.item("Description") = ""
driver.Properties_.item("LocalizedInformation") = LocalizedSettings
driver.Properties_.item("IsEnabled") = true
driver.Put_
Next
End Sub
Function GetDriverName(xmlContent, nodeName, attributeName)
' Load the XML Document
Dim attrValue
Dim XMLDoc
Dim objNode
Dim displayNameNode
attrValue = ""
Set XMLDoc = CreateObject("Microsoft.XMLDOM")
XMLDoc.async = False
XMLDoc.loadXML(xmlContent)
'Check for a successful load of the XML Document.
If xmlDoc.parseError.errorCode <> 0 Then
WScript.Echo vbcrlf & "Error loading XML Document. Error Code : 0x" & hex(xmldoc.parseerror.errorcode)
WScript.Echo "Reason: " & xmldoc.parseerror.reason
WScript.Echo "Parse Error line " & xmldoc.parseError.line & ", character " & _
xmldoc.parseError.linePos & vbCrLf & xmldoc.parseError.srcText
GetXMLAttributeValue = ""
Else
' Select the node
Set objNode = xmlDoc.SelectSingleNode(nodeName)
If Not objNode Is Nothing Then
' Found the element, now just pick up the Text attribute value
Set displayNameNode = objNode.attributes.getNamedItem(attributeName)
If Not displayNameNode Is Nothing Then
attrValue = displayNameNode.value
Else
WScript.Echo "Attribute not found"
End If
Else
WScript.Echo "Failed to locate " & nodeName & " element."
End If
End If
' Save the results
GetDriverName = attrValue
End Function
public void ImportOemDriver(
WqlConnectionManager connection,
string path,
string name)
{
try
{
Dictionary<string, object> inParams = new Dictionary<string, object>();
// Set up parameters for the path and file name.
inParams.Add("DriverPath", path);
inParams.Add("OEMFile", name);
// Import the INF file.
IResultObject outParams = connection.ExecuteMethod("SMS_Driver", "CreateFromOEM", inParams);
// Create the driver instance from the management base object returned in result["Drivers"].
foreach (object obj in outParams["Drivers"].ObjectArrayValue)
{
IResultObject driver = connection.CreateInstance(obj);
driver["IsEnabled"].BooleanValue = true;
List<IResultObject> driverInformationList = driver.GetArrayItems("LocalizedInformation");
// Set up the display name and other information.
IResultObject driverInfo = connection.CreateEmbeddedObjectInstance("SMS_CI_LocalizedProperties");
driverInfo["DisplayName"].StringValue = GetDriverName(driver);
driverInfo["LocaleID"].IntegerValue = 1033;
driverInfo["Description"].StringValue = "";
driverInformationList.Add(driverInfo);
driver.SetArrayItems("LocalizedInformation", driverInformationList);
// Commit the SMS_Driver object.
driver.Put();
}
}
catch (SmsException e)
{
Console.WriteLine("Failed to import driver: " + e.Message);
throw;
}
}
public string GetDriverName(IResultObject driver)
{
// Extract
XmlDocument sdmpackage = new XmlDocument();
sdmpackage.LoadXml(driver.Properties["SDMPackageXML"].StringValue);
// Iterate over all the <DisplayName/> tags.
foreach (XmlNode displayName in sdmpackage.GetElementsByTagName("DisplayName"))
{
// Grab the first one with a Text attribute not equal to null.
if (displayName != null && displayName.Attributes["Text"] != null
&& !string.IsNullOrEmpty(displayName.Attributes["Text"].Value))
{
// Return the DisplayName text.
return displayName.Attributes["Text"].Value;
}
}
// Default the driverName to the UniqueID.
return driver["CI_UniqueID"].StringValue;
}
Die Beispielmethode verfügt über die folgenden Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
Connection |
-Verwalteten: WqlConnectionManager – VBScript: SWbemServices |
Eine gültige Verbindung mit dem SMS-Anbieter. |
path |
-Verwalteten: String -Vbscript: String |
Ein gültiger UNC-Netzwerkpfad zu dem Ordner, der den Treiberinhalt enthält. Beispiel: \\Servers\Driver\VideoDriver. |
name |
-Verwalteten: String -Vbscript: String |
Der Name der Datei Txtsetup.oem. Sie haben beispielsweise \\server\drivers\Video für path und Txtsetup.oem für name . |
Kompilieren des Codes
Für dieses C#-Beispiel ist Folgendes erforderlich:
Namespaces
System
System.Collections.Generic
System.Text
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 Schützen Configuration Manager Anwendungen finden Sie unter Configuration Manager rollenbasierte Verwaltung.