Перечисление или список всех экземпляров ресурса
Метод Session.Enumerate — это подход к удаленному управлению Windows для получения всех экземпляров указанного ресурса.
Метод Session.Enumerate не получает коллекцию в объекте SWbemObjectSet, например вызов SWbemService.ExecQuery с запросом WMI в качестве параметра (например, ExecQuery("SELECT * from Win32_LogicalDisk")
), или вызов метода, например SWbemObject.Instances_.
Session.Enumerate и методы объекта перечисления гораздо более похожи на операцию объекта TextStream, используемо го для чтения файлов в виде потока.
Чтобы считывать файлы в виде текстового потока, необходимо создать скрипт объект TextStream и вызвать метод TextStream.Readline для чтения каждой строки файла. Аналогично, можно вызвать метод Session.Enumerate, чтобы получить объект перечислитель , и затем вызвать метод Enumerator.ReadItem для получения следующего элемента. Как и в случае чтения из текстового файла, можно вызвать свойство Enumerator.AtEndOfStream, чтобы проверить, достигли ли вы конца элементов данных.
Перечисление ресурса
Создайте сеанс.
Const RemoteComputer = "servername.domain.com" Set objWsman = CreateObject( "WSMan.Automation" ) Set objSession = objWsman.CreateSession( "https://" _ & RemoteComputer )
Создайте универсальный код ресурса (URI) для идентификации ресурса.
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_ "wmi/root/cimv2/Win32_ScheduledJob"
Вызовите метод Session.Enumerate. Этот вызов запускает перечисление. В WinRM операция перечисления не получает коллекцию таким образом, как это делает WMI. Вместо этого метод Session.Enumerate устанавливает контекст перечисления протоколов WS-Management, который поддерживается в объектеперечислителя.
Set EnumJobs = objSession.Enumerate( strResource )
Вызовите метод Enumerator.ReadItem, чтобы получить следующий элемент результатов. В протоколе WS-Management это соответствует операции извлечения. Используйте метод Enumerator.AtEndOfStream в качестве элемента управления, чтобы узнать, когда перестать читать.
While Not EnumJobs.AtEndOfStream NumOfJobs = NumOfJobs + 1 DisplayOutput( EnumJobs.ReadItem ) Wend
В следующем примере кода VBScript показан полный скрипт.
Const RemoteComputer = "servername.domain.com"
Set objWsman = CreateObject( "WSMan.Automation" )
Set objSession = objWsman.CreateSession( "https://" & RemoteComputer )
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_
"wmi/root/cimv2/Win32_ScheduledJob"
Set EnumJobs = objSession.Enumerate( strResource )
NumOfJobs = 0
While Not EnumJobs.AtEndOfStream
NumOfJobs = NumOfJobs + 1
DisplayOutput( EnumJobs.ReadItem )
Wend
Wscript.Echo "There are " & NumOfJobs & " jobs scheduled."
'****************************************************
' 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
Связанные разделы