Freigeben über


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

  1. Richten Sie eine Verbindung mit dem SMS-Anbieter ein. Weitere Informationen finden Sie unter Grundlagen des SMS-Anbieters.

  2. Rufen Sie die SMS_Driver Klasse CreateFromOEM-Methode auf, um eine Auflistung von Verwaltungsbasisobjekten abzurufen.

  3. Erstellen Sie für die Verwaltungsbasisobjekte ein SMS_Driver -Objekt für jeden Treiber.

  4. Füllen Sie das SMS_Driver-Objekt auf.

  5. 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 truefestgelegt 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.

Siehe auch

Angeben der unterstützten Plattformen für einen Treiber