Requêter pour des instances spécifiques d’une ressource
L’appel à Session.Enumerate a des paramètres optionnels qui restreignent l’énumération en une requête. Étant donné que l’API de script WinRM et l’API C++ WinRM sont étroitement modélisées sur le protocole sous-jacent WS-Management, les paramètres utilisent la même terminologie pour les requêtes que le protocole—filter et filter dialect.
Vous pouvez soit utiliser les paramètres filtre et dialecte de Session.Enumerate soit construire et fournir un objet ResourceLocator et la méthode AddSelector, mais vous ne pouvez pas faire les deux.
Cette procédure exécute une requête pour les adaptateurs réseau qui ont TCP/IP lié et activé. La requête demande toutes les instances de Win32_NetworkAdapterConfiguration qui ont la propriété IpEnabled définie sur True. À l’exception de l’ajout des paramètres filter et dialect, la requête est traitée comme une énumération simple.
Dans cet exemple, le nom de ressource pour la constante Resource est représenté par un astérisque « * » parce que le nom de la classe, Win32_NetworkAdapterConfiguration, est déjà mentionné dans la chaîne strFilter.
Pour interroger des instances spécifiques d’une ressource
Pour faciliter la lecture, définissez les URI comme des 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"
Créer une session.
Set objWsman = CreateObject("Wsman.Automation") Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
Construisez la chaîne de filtre. La gestion à distance de Windows prend en charge WQL comme dialecte de filtre.
strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
Définissez les constantes d’énumération requises dans le paramètre flags.
Soyez conscient que si les flags incluent les constantes d’énumération WSManFlagHierarchyDeepBasePropsOnly ou WSManFlagHierarchyShallow, alors le service WinRM renvoie le code d’erreur ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED.
Appelez la méthode Session.Enumerate. Cet appel commence une énumération. La méthode Session.Enumerate établit un contexte d’énumération du protocole WS-Management, maintenu dans l’objet Enumerator.
Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
Appelez la méthode Enumerator.ReadItem pour obtenir l’élément suivant des résultats. Dans le protocole WS-Management, cela correspond à l’opération de tirage. Utilisez la méthode Enumerator.AtEndOfStream comme un 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
Rubriques connexes