Udostępnij za pośrednictwem


Jak zaimportować sterownik systemu Windows opisany przez plik INF do programu Configuration Manager

Sterownik systemu Windows opisany w pliku informacyjnym (inf) w programie Configuration Manager można zaimportować przy użyciu metody CreateFromINF w klasie SMS_Driver.

Aby zaimportować sterownik systemu Windows

  1. Skonfiguruj połączenie z dostawcą programu SMS. Aby uzyskać więcej informacji, zobacz Podstawy dostawcy programu SMS.

  2. Wywołaj metodę CreateFromINF w klasie SMS_Driver , aby uzyskać początkowy obiekt podstawowy zarządzania klasami SMS_Driver Server WMI .

  3. Utwórz wystąpienie SMS_Driver przy użyciu obiektu podstawowego zarządzania.

  4. Wypełnij SMS_Driver obiekt.

  5. SMS_Driver Zatwierdź obiekt.

Przykład

Poniższa przykładowa metoda tworzy SMS_Driver obiekt dla sterownika systemu Windows przy użyciu podanej ścieżki i nazwy pliku. W przykładzie można również włączyć sterownik, ustawiając wartość właściwości na IsEnabledtrue. Funkcja GetDriverName pomocnika służy do pobierania nazwy sterownika z pliku XML pakietu sterowników.

Uwaga

Parametr path musi być podany jako ścieżka sieciowa uniwersalnej konwencji nazewnictwa (UNC), na przykład \\localhost\Drivers\ATIVideo\.

W tym przykładzie właściwość LocaleID jest zapisana na stałe w języku angielskim (USA). Jeśli potrzebujesz ustawień regionalnych dla użytkowników spoza STANÓW Zjednoczonych można pobrać z właściwości klasy WMILocaleID serwera SMS_Identification.

Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz Wywoływanie fragmentów kodu programu Configuration Manager.

Sub ImportINFDriver(connection, path, name)  

    Dim driverClass  
    Dim inParams  
    Dim outParams  

    On Error Resume Next  

    ' Obtain an instance of the class   
    ' using a key property value.  

    Set driverClass = connection.Get("SMS_Driver")  

    ' Obtain an InParameters object specific  
    ' to the method.  
    Set inParams = driverClass.Methods_("CreateFromINF"). _  
        inParameters.SpawnInstance_()  

    ' Add the input parameters.  
    inParams.Properties_.Item("DriverPath") =  path  
    inParams.Properties_.Item("INFFile") =  name  

    ' Call the method.  
    ' The OutParameters object in outParams  
    ' is created by the provider.  
    Set outParams = connection.ExecMethod("SMS_Driver", "CreateFromINF", inParams)  

   If Err <> 0 Then  
        Wscript.Echo "Failed to add to the driver catalog: " + path + "\" + name  
        Exit Sub  
    End If      

    outParams.Driver.IsEnabled =  True  

    Dim LocalizedSettings(0)  
    Set LocalizedSettings(0) = connection.Get("SMS_CI_LocalizedProperties").SpawnInstance_()  
    LocalizedSettings(0).Properties_.item("LocaleID") =  1033   
    LocalizedSettings(0).Properties_.item("DisplayName") = _  
            GetDriverName(outParams.Driver.SDMPackageXML, "//DisplayName", "Text")  

    LocalizedSettings(0).Properties_.item("Description") = ""          
    outParams.Driver.LocalizedInformation = LocalizedSettings  

    ' Save the driver.  
    outParams.Driver.Put_  

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 ImportInfDriver(  
    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("INFFile", name);  

        // Import the INF file.  
        IResultObject result = connection.ExecuteMethod("SMS_Driver", "CreateFromINF", inParams);  

        // Create the SMS_Driver driver instance from the management base object returned in result["Driver"].  
        IResultObject driver = connection.CreateInstance(result["Driver"].ObjectValue);  

        // Enable the driver.  
        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;         
 }  

Przykładowa metoda ma następujące parametry:

Parametr Wpisać Opis
connection -Zarządzane: WqlConnectionManager
- VBScript: SWbemServices
Prawidłowe połączenie z dostawcą programu SMS.
path -Zarządzane: String
- VBScript: String
Prawidłowa ścieżka sieciowa UNC do folderu zawierającego zawartość sterownika. Na przykład \\Servers\Driver\VideoDriver.
name -Zarządzane: String
- VBScript: String
Nazwa pliku inf. Na przykład ATI.inf.

Kompilowanie kodu

Ten przykład języka C# wymaga:

Przestrzenie nazw

System

System.Collections.Generic

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Montaż

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Niezawodne programowanie

Aby uzyskać więcej informacji na temat obsługi błędów, zobacz About Configuration Manager Errors (Informacje o błędach programu Configuration Manager).

Zabezpieczenia programu .NET Framework

Aby uzyskać więcej informacji na temat zabezpieczania aplikacji programu Configuration Manager, zobacz Administracja oparta na rolach programu Configuration Manager.

Zobacz też

CreateFromINF, metoda w klasie SMS_Driver
SMS_Driver Server WMI Class
Jak określić obsługiwane platformy dla sterownika