Interrogation d’instances spécifiques d’une ressource

L’appel à Session.Enumerate a des paramètres facultatifs qui réduisent l’énumération en une requête. Étant donné que l’API WinRM Scripting et l’API WinRM C++ sont étroitement modélisées sur le protocole de WS-Management sous-jacent, les paramètres utilisent la même terminologie pour l’interrogation que le protocole : filtrer et filtrer le dialecte.

Vous pouvez utiliser les paramètres de filtre et de dialecte de Session.Enumerate ou vous pouvez construire et fournir un objet ResourceLocator et la méthode AddSelector , mais vous ne pouvez pas effectuer les deux.

Cette procédure exécute une requête pour les cartes réseau qui ont tcp/IP lié et activé. La requête demande toutes les instances de Win32_NetworkAdapterConfiguration dont la propriété IpEnabled a la valeur True. À l’exception de l’ajout du filtre et du dialecte, la requête est gérée comme une simple énumération.

Dans cet exemple, le nom de ressource de la constante Resource est représenté par un astérisque « * », car le nom de la classe, Win32_NetworkAdapterConfiguration, est déjà mentionné dans la chaîne strFilter .

Pour rechercher des instances spécifiques d’une ressource

  1. Pour faciliter la lecture, définissez des URI en tant que 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. Créer une session.

    Set objWsman = CreateObject("Wsman.Automation")
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
    
  3. Construisez la chaîne de filtre. Windows Remote Management prend en charge WQL comme dialecte de filtre.

    strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
    
  4. Définissez toutes les constantes d’énumération requises dans le paramètre flags .

    N’oubliez pas que si les indicateurs incluent les constantes d’énumérationWSManFlagHierarchyDeepBasePropsOnly ou WSManFlagHierarchyShallow , le service WinRM retourne le code d’erreur ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED.

  5. Appelez la méthode Session.Enumerate . Cet appel démarre une énumération. La méthode Session.Enumerate établit un contexte d’énumération de protocole WS-Management, conservé dans l’objet Enumerator .

    Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
    
  6. Appelez la méthode Enumerator.ReadItem pour obtenir l’élément suivant des résultats. Dans WS-Management protocole, cela correspond à l’opération d’extraction. Utilisez la méthode Enumerator.AtEndOfStream comme contrôle pour savoir quand arrêter la lecture.

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

L’exemple de code VBScript suivant montre le script complet.

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

Utilisation de La gestion à distance de Windows

Énumération ou liste de toutes les instances d’une ressource

ResourceLocator