Compartilhar via


Consultando instâncias específicas de um recurso

A chamada para Session.Enumerate tem parâmetros opcionais que restringem a enumeração em uma consulta. Como a API de Script do WinRM e a API do WinRM C++ são modeladas de perto no protocolo WS-Management subjacente, os parâmetros usam a mesma terminologia para consulta que o protocolo — filtro e dialeto de filtro.

Você pode usar os parâmetros de filtro e dialeto de Session.Enumerate ou pode construir e fornecer um objeto ResourceLocator e o método AddSelector, mas não pode fazer as duas coisas.

Este procedimento executa uma consulta para adaptadores de rede que têm TCP/IP associado e habilitado. A consulta solicita todas as instâncias de Win32_NetworkAdapterConfiguration que têm a propriedade IpEnabled definida como True. Exceto pela adição do filtro e do dialeto, a consulta é tratada como uma enumeração simples.

Neste exemplo, o nome do recurso para a constante Resource é representado por um asterisco "*" porque o nome da classe, Win32_NetworkAdapterConfiguration, já é mencionado na cadeia de caracteres strFilter.

Para consultar instâncias específicas de um recurso

  1. Para facilitar a leitura, defina URIs como constantes.

    Const RemoteComputer = "servername.domain.com"
    Const Resource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*"
    Const Dialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL"
    
  2. Criar uma sessão.

    Set objWsman = CreateObject("Wsman.Automation")
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
    
  3. Construa a cadeia de caracteres de filtro. O Gerenciamento Remoto do Windows dá suporte ao WQL como o dialeto de filtro.

    strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
    
  4. Defina todas as constantes de enumeração necessárias no parâmetro flags.

    Lembre-se de que, se os sinalizadores incluírem as constantes de enumeração WSManFlagHierarchyDeepBasePropsOnly ou WSManFlagHierarchyShallow, o serviço WinRM retornará o código de erro ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED.

  5. Chame o método Session.Enumerate. Essa chamada inicia uma enumeração. O método Session.Enumerate estabelece um contexto de enumeração de protocolo WS-Management, mantido no objeto Enumerator.

    Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
    
  6. Chame o método Enumerator.ReadItem para obter o próximo item dos resultados. No protocolo WS-Management, isso corresponde à operação de pull. Use o método Enumerator.AtEndOfStream como um controle para saber quando parar de ler.

    While Not objResultSet.AtEndOfStream
        DisplayOutput(objResultSet.ReadItem)
    Wend
    

O exemplo de código VBScript a seguir mostra o script completo.

Const RemoteComputer = "servername.domain.com"
Const Resource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*"
Const Dialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL"

Set objWsman = CreateObject("Wsman.Automation")
Set objSession = objWsman.CreateSession("https://" & RemoteComputer)

strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"

Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)

While Not objResultSet.AtEndOfStream
    DisplayOutput(objResultSet.ReadItem)
Wend

'****************************************************
' Displays WinRM XML message using built-in XSL
'****************************************************
Sub DisplayOutput(strWinRMXml)
    Dim xmlFile, xslFile
    Set xmlFile = CreateObject("MSXml2.DOMDocument.3.0") 
    Set xslFile = CreateObject("MSXml2.DOMDocument.3.0")
    xmlFile.LoadXml(strWinRMXml)
    xslFile.Load("WsmTxt.xsl")
    Wscript.Echo xmlFile.TransformNode(xslFile) 
End Sub

Usando o Gerenciamento Remoto do Windows

Enumerando ou listando todas as instâncias de um recurso

ResourceLocator