Dela via


Importera en Windows-drivrutin som beskrivs av en Txtsetup.oem-fil till Configuration Manager

Du kan importera en Windows-drivrutin som beskrivs av en Txtsetup.oem-fil i Configuration Manager med hjälp av metoden CreateFromOEM i class SMS_Driver. Configuration Manager kan automatiskt skapa definitioner för de flesta drivrutiner från bara en .inf-fil. Men när du installerar drivrutiner för masslagring på operativsystem före Windows Vista måste Configuration Manager också ha viss information som finns i filen Txtsetup.oem. För att underlätta detta CreateFromOEM skapar SMS_Driver WMI-klassobjekt för varje .inf-fil som refereras i filen Txtsetup.oem. Sedan kan du anpassa drivrutinsegenskaperna innan du sparar dem.

Obs!

Om en drivrutinstillverkare har angett en Txtsetup.oem-fil bör du importera drivrutinen med hjälp av den här proceduren i stället för .inf-filerna om du planerar att distribuera Windows 2000, Windows XP eller Windows Server 2003.

Importera en Windows-drivrutin

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

  2. Anropa metoden SMS_Driver klassen CreateFromOEM för att hämta en samling basobjekt för hantering.

  3. För hanteringsbasobjekten skapar du ett SMS_Driver objekt för varje drivrutin.

  4. Fyll i SMS_Driver-objektet.

  5. Checka in SMS_Driver-objektet.

Exempel

Följande exempelmetod skapar ett SMS_Driver objekt för en Windows-drivrutin med hjälp av den angivna sökvägen och filnamnet Txtsetup.oem. Exemplet aktiverar även drivrutinen genom att ange värdet för egenskapen IsEnabled till true. Hjälpfunktionen GetDriverName används för att hämta namnet på drivrutinen från XML-drivrutinspaketet.

Obs!

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

I exemplet är egenskapen LocaleID hårdkodad till engelska (USA). Om du behöver nationella inställningar för icke-USA installationer kan du hämta den från egenskapen SMS_Identification Server WMI ClassLocaleID .

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

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

Exempelmetoden har följande parametrar:

Parameter Typ Beskrivning
Connection -Hanterade: WqlConnectionManager
– VBScript: SWbemServices
En giltig anslutning till SMS-providern.
path -Hanterade: String
-Vbscript: String
En giltig UNC-nätverkssökväg till mappen som innehåller drivrutinsinnehållet. Till exempel \\Servers\Driver\VideoDriver.
name -Hanterade: String
-Vbscript: String
Namnet på filen Txtsetup.oem. Du kan till exempel ha \\server\drivers\Video för path och Txtsetup.oem för name.

Kompilera koden

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

Namnområden

System

System.Collections.Generic

System.Text

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

Så här anger du vilka plattformar som stöds för en drivrutin