Partilhar via


Como Importar um Controlador do Windows Descrito por um Ficheiro INF para o Configuration Manager

Pode importar um controlador Windows descrito por um ficheiro de informação (.inf), no Gestor de Configuração, utilizando o Método CreateFromINF em classe SMS_Driver.

Importar um motorista de Windows

  1. Configurar uma ligação com o Fornecedor DE SMS. Para mais informações, consulte os fundamentos do Fornecedor de SMS.

  2. Ligue para o método CreateFromINF em SMS_Driver de classe para obter o objeto base de base de gestão da classe WMI do SMS_Driver do servidor inicial.

  3. Crie um exemplo de SMS_Driver utilizando o objeto base de gestão.

  4. Povoar o SMS_Driver objeto.

  5. Cometa o SMS_Driver objeto.

Exemplo

O método exemplo a seguir cria um SMS_Driver objeto para um Windows controlador utilizando o caminho e o nome do ficheiro fornecidos. O exemplo também permite ao condutor definir o valor do IsEnabled imóvel para true . A função de ajudante GetDriverName é utilizada para obter o nome do condutor do pacote de condutor XML.

Nota

O path parâmetro deve ser fornecido como uma via de rede da Convenção Universal de Nomeação (UNC), por exemplo, \ \localhost\Drivers\ATIVideo \ .

No exemplo, a LocaleID propriedade é codificada para inglês (EUA). Se precisar do local para não-EUA. instalações, você pode obtê-lo a partir da propriedade classe WMI do SMS_Identification servidor. LocaleID

Para obter informações sobre a chamada do código de amostra, consulte o Código de Identificação do Gestor de Chamadas.

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

O método exemplo tem os seguintes parâmetros:

Parâmetro Tipo Description
connection - Gerido: WqlConnectionManager
- VBScript: SWbemServices
Uma ligação válida ao Fornecedor de SMS.
path - Gerido: String
- VBScript: String
Um caminho de rede válido da UNC para a pasta que contém o conteúdo do controlador. Por exemplo, \ \Servidores\Driver\VideoDriver.
name - Gerido: String
- VBScript: String
O nome do ficheiro .inf. Por exemplo, ATI.inf.

A Compilar o Código

Este exemplo C# requer:

Espaços de nomes

Sistema

System.Collections.Generic

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assemblagem

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programação Robusta

Para obter mais informações sobre o tratamento de erros, consulte Sobre erros do Gestor de Configuração.

Segurança do .NET Framework

Para obter mais informações sobre a segurança das aplicações do Gestor de Configuração, consulte a administração baseada em funções do Gestor de Configuração.

Consulte também

Criar MétodoFromINF em SMS_Driver de classe
Classe WMI do servidor de SMS_Driver
Como especificar as plataformas suportadas para um condutor