Query per istanze specifiche di una risorsa

La chiamata a Session.Enumerate include parametri facoltativi che restringeno l'enumerazione in una query. Poiché l'API Scripting WinRM e l'API C++ WinRM sono strettamente modellate sul protocollo di WS-Management sottostante, i parametri usano la stessa terminologia per eseguire query sul protocollo, filtrare e filtrare il dialetto.

È possibile usare i parametri di filtro e di dialetto di Session.Enumerate oppure è possibile costruire e fornire un oggetto ResourceLocator e il metodo AddSelector , ma non è possibile eseguire entrambe le operazioni.

Questa procedura esegue una query per schede di rete con associazione TCP/IP e abilitata. La query richiede tutte le istanze di Win32_NetworkAdapterConfiguration con la proprietà IpEnabled impostata su True. Ad eccezione dell'aggiunta del filtro e del dialetto, la query viene gestita come un'enumerazione semplice.

In questo esempio il nome della risorsa per la costante Resource è rappresentato da un asterisco "*" perché il nome della classe, Win32_NetworkAdapterConfiguration, è già menzionato nella stringa strFilter .

Per eseguire una query per istanze specifiche di una risorsa

  1. Per facilitare la lettura, definire gli URI come costanti.

    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. Crea una sessione.

    Set objWsman = CreateObject("Wsman.Automation")
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
    
  3. Creare la stringa di filtro. Gestione remota Windows supporta WQL come dialetto del filtro.

    strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
    
  4. Impostare le costanti di enumerazione necessarie nel parametro flag .

    Tenere presente che se i flag includono le costanti di enumerazioneWSManFlagHierarchyDeepBasePropsOnly o WSManFlagHierarchyShallow , il servizio WinRM restituisce il codice di errore ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED.

  5. Chiamare il metodo Session.Enumerate . Questa chiamata avvia un'enumerazione. Il metodo Session.Enumerate stabilisce un contesto di enumerazione del protocollo WS-Management, gestito nell'oggetto Enumeratore .

    Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
    
  6. Chiamare il metodo Enumerator.ReadItem per ottenere l'elemento successivo dei risultati. Nel protocollo WS-Management corrisponde all'operazione pull. Usare il metodo Enumerator.AtEndOfStream come controllo per sapere quando interrompere la lettura.

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

Nell'esempio di codice VBScript seguente viene illustrato lo 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

Uso di Gestione remota di Windows

Enumerazione o elenco di tutte le istanze di una risorsa

ResourceLocator