WMI e Gerenciamento Remoto do Windows

O Gerenciamento Remoto do Windows pode ser usado para recuperar dados expostos pela Instrumentação de Gerenciamento do Windows (WMI e MI). Você pode obter dados WMI com scripts ou aplicativos que usam a API de Script WinRM ou por meio da ferramenta de linha de comando winrm .

O WinRM dá suporte à maioria das classes e operações familiares do WMI, incluindo objetos inseridos. O WinRM pode aproveitar o WMI para coletar dados sobre recursos ou para gerenciar recursos em um sistema operacional baseado no Windows. Isso significa que você pode obter dados sobre objetos como discos, adaptadores de rede, serviços ou processos em sua empresa por meio do conjunto existente de classes WMI. Você também pode acessar os dados de hardware disponíveis no provedor de IPMI WMI padrão.

Identificando um recurso WMI

Você pode referenciar uma classe WMI como um recurso no WinRM e no protocolo WS-Management: um tipo de entidade gerenciada, como um serviço ou um disco.

Uma classe ou método WMI é identificado por um URI, assim como qualquer outro recurso é ao usar o protocolo WS-Management. O URI pode especificar um recurso WMI (classe), uma ação WMI (método) ou identificar uma instância específica de uma classe em mensagens enviadas por uma rede. Para obter mais informações, consulte URIs de recurso.

Construindo o prefixo de URI para classes WMI

O prefixo de URI contém uma parte fixa e o namespace WMI. Por exemplo, o prefixo de URI no Windows Server que contém a parte fixa do prefixo é: http://schemas.microsoft.com/wbem/wsman/1/wmi/<WmiNamespace>. Isso permite que o prefixo de URI seja gerado para qualquer namespace WMI. Por exemplo, para acessar o namespace WMI raiz\padrão , use o seguinte prefixo de URI: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/default/.

A maioria das classes WMI para gerenciamento está no namespace root\cimv2 . Para acessar classes e instâncias no namespace root\cimv2 , use o prefixo de URI: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/. Para obter mais informações, consulte URIs de recurso.

Gerando um URI completo para classes WMI

O URI que você fornece, seja para a ferramenta de linha de comando do Winrm ou para um script, consiste no prefixo mais a especificação do recurso.

O procedimento a seguir descreve como gerar um URI de recurso para obter uma classe WMI ou usar em uma operação de enumeração.

Para gerar um URI de recurso para uma classe WMI

  1. Comece com o prefixo que indica que o esquema de protocolo WS-Management deve ser usado.

    https://schemas.microsoft.com/wbem/wsman/1

    O prefixo de URI de recurso para classes WMI é sempre o mesmo. Para obter mais informações, consulte Prefixos de URI.

  2. Adicione o namespace WMI ao prefixo.

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/

  3. Adicione o nome da classe.

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service

  4. Para definir o valor de uma propriedade ou invocar um método específico, adicione o valor ou os valores de chave necessários para a classe .

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt

    Se você deixar o valor da chave em branco, não alterará o valor da propriedade original.

    Observação

    Deixar o valor da chave em branco define o valor da propriedade como NULL.

     

Localizando um recurso WMI com WinRM

Você pode obter dados WMI por meio da ferramenta de linha de comando, Winrm ou por meio de um script do Visual Basic que usa a API de Script WinRM. Você não usa um caminho WMI para localizar um recurso. Em vez disso, você converte o namespace e a hierarquia do WMI em um URI.

O URI do WinRM para uma classe WMI contém duas partes: o prefixo de URI e a classe que você deseja acessar.

Por exemplo, o URI a seguir pode ser fornecido ao método Session.Enumerate para listar todos os serviços em um computador. O prefixo de URI é http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/e a classe é Win32_Service.

strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"

No WMI, liste os dados de todas as instâncias de um recurso ou classe de várias maneiras:

  • Uma consulta para todas as instâncias desse recurso.

    Set colServices = objWMIService.ExecQuery("Select * from Win32_Service")

  • Uma chamada para SWbemServices.InstancesOf ou SWbemObject.Instances_.

    Set colServices = InstancesOf("Win32_Service")

No WinRM, há uma maneira de listar todas as instâncias de um recurso: Session.Enumerate.

strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"
Set colServices = objSession.Enumerate( strResource )

Localizando uma instância específica de um recurso WMI

No WMI, você pode designar uma instância específica de uma classe especificando valores para as propriedades de chave ou consultando uma instância que corresponda a uma lista de valores de propriedade. As propriedades de chave têm o qualificador de chave WMI.

Você pode obter uma instância específica de uma classe de várias maneiras:

  • Uma chamada para Session.Enumerate com os parâmetros de filtro e dialeto para criar uma consulta.

    RemoteComputer = "servername.domain.com"
    strDialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL"
    strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*"
    Set objWsman = CreateObject("Wsman.Automation")
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
    
    strFilter = "SELECT * FROM Win32_Share WHERE Name='Admin$'"
    Set objResultSet = objSession.Enumerate(strResource, strFilter, strDialect)
    
  • Uma chamada para SWbemServices.Get. Para Session.Get, você deve fornecer um ou mais valores de chave específicos, precedidos por um ponto de interrogação (?).

    O formato do URI para uma instância específica é http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/WMI_Class?Key1=Value.

    strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=winmgmt"
    

    Uma classe WMI pode ter mais de uma chave. Os pares nome-valor da chave são separados por um sinal "+". Nesse caso, o formato é: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Key1=Value1+Key2=Value2.

    A sintaxe WinRM para obter um objeto WMI singleton é diferente da WMI. Um singleton é uma classe WMI definida para que apenas uma instância seja permitida. Win32_CurrentTime ou Win32_WMISetting são exemplos de uma classe singleton WMI.

    A sintaxe WMI para singletons é mostrada no exemplo de código VBScript a seguir.

    Set TimeObject = objWMIService.Get("Win32_CurrentTime=@")
    

    O exemplo a seguir mostra a sintaxe singleton do WinRM que não usa "@".

    strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
    
  • Adicionando um seletor a um objeto ResourceLocator ou IWSManResourceLocator .

    O exemplo de código VBScript a seguir mostra como usar um seletor para obter uma instância específica do Win32_Processor.

    strUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Processor"
    Set objWsman = CreateObject("Wsman.Automation")
    Set Session = objWsman.CreateSession
    Set Locator = objWsman.CreateResourceLocator(strUri)
    Locator.AddSelector "DeviceID", "CPU0"
    

Sobre o Gerenciamento Remoto do Windows

Prefixos de URI

URIs do Recurso

Scripts no Gerenciamento Remoto do Windows