Опубликован: 12.01.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 13:

Типичные администраторские сценарии WMI

< Лекция 12 || Лекция 13: 12 || Лекция 14 >
Вывод списка команд, выполняемых при загрузке системы

Все команды, которые выполняются автоматически при старте системы, хранятся в WMI в виде экземпляров класса Win32_StartupCommand. Сценарий StartupCommand.vbs, представленный в листинге 13.5, выводит эти команды на экран.

'*******************************************************************
' Имя: StartupCommand.vbs
' Язык: VBScript
' Описание: Вывод списка команд, выполняемых при загрузке компьютера
'*******************************************************************
Option Explicit
 
' Объявляем переменные
Dim strComputer       ' Имя компьютера
Dim strNamespace      ' Имя пространства имен
Dim strClass          ' Имя класса 
Dim objClass          ' Объект SWbemObject (класс WMI)
Dim colStartupCommands' Коллекция экземпляров класса WMI
Dim objStartupCommand ' Элемент коллекции
Dim strResult         ' Строка для вывода на экран

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_StartupCommand"
strResult = "Комманды выполняемые при загрузке компьютера :" & VbCrLf

' Получаем указатель на класс WMI 
Set objClass = GetObject("WinMgmts:\\" & strComputer & _
                         "\" & strNamespace & ":" & strClass)
' Создаем коллекцию экземпляров класса Win32_StartupCommand
Set colStartupCommands = objClass.Instances_

' Перебираем элементы коллекции 
For Each objStartupCommand in colStartupCommands
  strResult = strResult & objStartupCommand.Command & VbCrLf  
Next

' Выводим результат на экран
Wscript.Echo strResult
'************************* Конец ***********************************
Листинг 13.5. Определение команд, выполняемых при загрузке компьютера
Вывод свойств операционной системы

Основные свойства установленной операционной системы (загрузочное устройство, номер сборки, дата установки и т. д.) можно получить с помощью объекта Win32_OperatingSystem (листинг 13.6).

'*******************************************************************
' Имя: OSProperty.vbs
' Язык: VBScript
' Описание: Вывод свойств операционной системы
'*******************************************************************
Option Explicit
 
' Объявляем переменные
Dim strComputer        ' Имя компьютера
Dim strNamespace       ' Имя пространства имен
Dim strClass           ' Имя класса 
Dim objClass           ' Объект SWbemObject (класс WMI)
Dim colOperatingSystems' Коллекция экземпляров класса WMI
Dim objOperatingSystem ' Элемент коллекции
Dim strResult          ' Строка для вывода на экран

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
strResult = " Свойства операционной системы: " & VbCrLf & VbCrLf

' Получаем указатель на класс WMI 
Set objClass = GetObject("WinMgmts:\\" & strComputer & _
                         "\" & strNamespace & ":" & strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colOperatingSystems = objClass.Instances_

' Перебираем элементы коллекции 
For Each objOperatingSystem in colOperatingSystems
  ' Формирум строку для вывода на экран 
  strResult = strResult & "Boot Device: " & _ 
              objOperatingSystem.BootDevice & VbCrLf
  strResult = strResult & "Build Number: " & _
              objOperatingSystem.BuildNumber & VbCrLf 
  strResult = strResult & "Build Type: " & _
              objOperatingSystem.BuildType & VbCrLf
  strResult = strResult & "Caption: " & _
              objOperatingSystem.Caption & VbCrLf
  strResult = strResult & "Code Set: " & _
              objOperatingSystem.CodeSet & VbCrLf
  strResult = strResult & "Country Code: " & _
              objOperatingSystem.CountryCode & VbCrLf
  strResult = strResult & "Install Date: " & _
              objOperatingSystem.InstallDate & VbCrLf
  strResult = strResult & "Licensed Users: " & _
              objOperatingSystem.NumberOfLicensedUsers & VbCrLf
  strResult = strResult & "Organization: " & _
              objOperatingSystem.Organization & VbCrLf
  strResult = strResult & "OS Language: " & _
              objOperatingSystem.OSLanguage & VbCrLf
  strResult = strResult & "OS Product Suite: " & _
              objOperatingSystem.OSProductSuite & VbCrLf
  strResult = strResult & "OS Type: " & _
              objOperatingSystem.OSType & VbCrLf
  strResult = strResult & "Primary: " & _
              objOperatingSystem.Primary & VbCrLf
  strResult = strResult & "Registered User: " & _
              objOperatingSystem.RegisteredUser & VbCrLf
  strResult = strResult & "Serial Number: " & _
              objOperatingSystem.SerialNumber & VbCrLf
  strResult = strResult & "Version: " & _
              objOperatingSystem.Version & VbCrLf
Next

' Выводим результат на экран
Wscript.Echo strResult
'************************* Конец ***********************************
Листинг 13.6. Вывод свойств операционной системы
Определение номера последнего обновления, установленного на компьютере

Сценарий ServPack.vbs, приведенный в листинге 13.7, выводит на экран номер последнего обновления (ServicePack), которое было установлено на компьютере (свойства ServicePackMajorVersion и ServicePackMinorVersion объекта Win32_OperatingSystem ).

'*******************************************************************
' Имя: ServPack.vbs
' Язык: VBScript
' Описание: Вывод номера ServicePack для операционной системы
'*******************************************************************
Option Explicit
 
' Объявляем переменные
Dim strComputer         ' Имя компьютера
Dim strNamespace        ' Имя пространства имен
Dim strClass            ' Имя класса 
Dim objClass            ' Объект SWbemObject (класс WMI)
Dim colOperatingSystems ' Коллекция экземпляров класса WMI
Dim objOperatingSystem  ' Элемент коллекции
Dim strResult           ' Строка для вывода на экран

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
strResult = "ServicePack установленный на этом компьютере " & VbCrLf

' Получаем указатель на класс WMI 
Set objClass = GetObject("WinMgmts:\\" & strComputer & _
                         "\" & strNamespace & ":" & strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colOperatingSystems = objClass.Instances_

' Перебираем элементы коллекции 
For Each objOperatingSystem in colOperatingSystems
  ' Формируем строку для вывода на экран
  strResult = strResult & "№ " & _ 
              objOperatingSystem.ServicePackMajorVersion & "." &_
              objOperatingSystem.ServicePackMinorVersion & VbCrLf  
Next

' Выводим результирущую строку на экран
Wscript.Echo strResult
'************************* Конец ***********************************
Листинг 13.7. Определение номера последнего обновления

Сбор сведений о подключенных устройствах

С помощью сценариев WMI можно быстро собрать информацию о параметрах и характеристиках различных устройств компьютера (процессор, память, клавиатура, мышь, параллельные и последовательные порты, звуковая и видеокарта, сетевой адаптер и т. д.). В листингах 13.8, 13.9 приведены примеры таких сценариев.

Получение информации о физической памяти

Получить информацию о банках физической памяти компьютера позволяют экземпляры класса Win32_PhysicalMemory. Сценарий MemoryInfo.vbs (листинг 13.8) выводит на экран наиболее важные свойства этих экземпляров.

'*******************************************************************
' Имя: MemoryInfo.vbs
' Язык: VBScript
' Описание: Вывод информации о физической памяти
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer       ' Имя компьютера
Dim strNamespace      ' Имя пространства имен
Dim strClass          ' Имя класса 
Dim objClass          ' Объект SWbemObject (класс WMI)
Dim colPhysMemory     ' Коллекция экземпляров класса WMI
Dim objPhysMemory     ' Элемент коллекции
Dim strResult         ' Результирующая строка

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_PhysicalMemory"
strResult = "Информация о физической памяти:" & vbCrLf & vbCrLf

' Получаем указатель на класс WMI 
Set objClass = GetObject("WinMgmts:\\" & strComputer & _
                         "\" & strNamespace & ":" & strClass)
' Создаем коллекцию экземпляров класса Win32_PhysicalMemory
Set colPhysMemory = objClass.Instances_

' Перебираем коллекцию
For Each objPhysMemory In colPhysMemory
  strResult = strResult & "Bank Label: " & _
              objPhysMemory.BankLabel & VbCrLf
  strResult = strResult & "Capacity: " & _
              objPhysMemory.Capacity & VbCrLf
  strResult = strResult & "Data Width: " & _
              objPhysMemory.DataWidth & VbCrLf
  strResult = strResult & "Description: " & _
              objPhysMemory.Description & VbCrLf
  strResult = strResult & "Device Locator: " & _
              objPhysMemory.DeviceLocator & VbCrLf
  strResult = strResult & "Form Factor: " & _
              objPhysMemory.FormFactor & VbCrLf
  strResult = strResult & "Hot Swappable: " & _
              objPhysMemory.HotSwappable & VbCrLf
  strResult = strResult & "Manufacturer: " & _
              objPhysMemory.Manufacturer & VbCrLf
  strResult = strResult & "Memory Type: " & _
              objPhysMemory.MemoryType & VbCrLf
  strResult = strResult & "Name: " & _
              objPhysMemory.Name & VbCrLf
  strResult = strResult & "Part Number: " & _
              objPhysMemory.PartNumber & VbCrLf
  strResult = strResult & "Speed: " & _
              objPhysMemory.Speed & VbCrLf
  strResult = strResult & "Tag: " & _
              objPhysMemory.Tag & VbCrLf
  strResult = strResult & "Type Detail: " & _
              objPhysMemory.TypeDetail & VbCrLf
Next

' Выводим результат на экран
Wscript.Echo strResult
'************************* Конец ***********************************
Листинг 13.8. Вывод информации о физической памяти
Получение информации о сетевом адаптере

В сценарии NetworkAdapterInfo.vbs (листинг 13.9) свойства сетевых адаптеров извлекаются с помощью класса Win32_NetworkAdapter. Отметим, что с помощью сценариев WMI можно также изменять конфигурацию сетевых карт — для этого следует использовать класс Win32_NetworkAdapterConfiguration, который предоставляет множество методов для настройки сетевых служб DNS, DHCP, WINS.

'*******************************************************************
' Имя: NetworkAdapterInfo.vbs
' Язык: VBScript
' Описание: Вывод информации о сетевых адаптерах
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer         ' Имя компьютера
Dim strNamespace        ' Имя пространства имен
Dim objService          ' Объект SWbemServices    
Dim colNetworkAdapters  ' Коллекция экземпляров класса WMI
Dim objNetworkAdapter   ' Элемент коллекции
Dim strResult           ' Результирующая строка
Dim WshShell            ' Объект WshShell
Dim theNotepad          ' Объект WshScriptExec

' Объявляем константы
Const wbemFlagForwardOnly = 32
Const wbemFlagReturnImmediately = 16
Const ForWriting = 2

' Процедура для записи информации в файл 
Sub TextOut (Text, File)
  ' Объявляем переменные
  Dim  objFSO, FOut 
  ' Создаем объект FileSystemObject
  Set  objFSO=WScript.CreateObject("Scripting.FileSystemObject")
  ' Открываем выходной файл для записи
  Set  FOut = objFSO.OpenTextFile (File,ForWriting,true)
  ' Записываем текстовую строку в файл
  FOut.WriteLine Text
  ' Закрываем выходной файл
  FOut.Close
End Sub

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strResult = "Зарегистрированные сетевые адаптеры " & VbCrLf & VbCrLf

' Подключаемся к пространству имен WMI
Set objService = GetObject("WinMgmts:\\" & _
                                   strComputer & "\" & strNamespace)

Set colNetworkAdapters = objService.ExecQuery(_
                         "SELECT * FROM Win32_NetworkAdapter",,_
                         wbemFlagReturnImmediately+wbemFlagForwardOnly)

' Перебираем элементы коллекции 
For Each objNetworkAdapter In colNetworkAdapters
  strResult = strResult & "Adapter Type: " & _
    objNetworkAdapter.AdapterType & VbCrLf &_
    "Description: " & objNetworkAdapter.Description & vbCrLf &_
    "Installed: " & objNetworkAdapter.Installed & vbCrLf &_
    "Manufacturer: " & objNetworkAdapter.Manufacturer & vbCrLf &_
    "Product Name: " & objNetworkAdapter.ProductName & vbCrLf &_
    "Net Connection ID: " & objNetworkAdapter.NetConnectionID & vbCrLf &_
    "Net Connection Status: " & _
      objNetworkAdapter.NetConnectionStatus & vbCrLf & _
    "MAC Address: " & objNetworkAdapter.MACAddress & vbCrLf &_  
    "PNP Device ID" & objNetworkAdapter.PNPDeviceID
Next

' Выводим результат в текстовый файл
TextOut  strResult, "C:\NetworkAdapters.txt" 

'Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
'Открываем созданный файл в Блокноте
Set theNotepad = WshShell.Exec("notepad " & "C:\NetworkAdapters.txt" )
'************************* Конец ***********************************
Листинг 13.9. Вывод информации о сетевых адаптерах

Управление службами и процессами

В листингах 13.1013.14 приведены сценарии, с помощью которых можно управлять процессами и службами Windows. Подобные сценарии особенно удобно применять для выполнения групповых операций, например, при необходимости запустить все приостановленные службы или завершить все процессы с определенным именем.

Получение информации о свойствах и состоянии служб

Сценарий ServicesInfo.vbs, приведенный в листинге 13.10, выводит информацию о зарегистрированных службах (экземпляры класса Win32_Service ) в текстовый файл C:\Services.txt, который затем открывается с помощью Блокнота.

'*******************************************************************
' Имя: ServicesInfo.vbs
' Язык: VBScript
' Описание: Вывод информации о службах 
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer       ' Имя компьютера
Dim strNamespace      ' Имя пространства имен
Dim objWMIService     ' Объект SWbemServices    
Dim colServices       ' Коллекция экземпляров класса WMI
Dim objService        ' Элемент коллекции
Dim strResult         ' Результирующая строка
Dim WshShell          ' Объект WshShell
Dim theNotepad        ' Объект WshScriptExec

' Объявляем константы
Const wbemFlagForwardOnly = 32
Const wbemFlagReturnImmediately = 16
Const ForWriting = 2

' Функция для записи информации в файл 
Sub TextOut (Text, File)
  ' Объявляем переменные
  Dim  objFSO, FOut 
  ' Создаем объект FileSystemObject
  Set  objFSO=WScript.CreateObject("Scripting.FileSystemObject")
  ' Открываем выходной файл для записи
  Set  FOut = objFSO.OpenTextFile (File,ForWriting,true)
  ' Записываем текстовую строку в файл
  FOut.WriteLine Text
  ' Закрываем выходной файл
  FOut.Close
End Sub

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strResult = "Информация о службах " & VbCrLf & VbCrLf

' Подключаемся к пространству имен WMI
Set objWMIService = GetObject("WinMgmts:\\" & _
                                   strComputer & "\" & strNamespace)

Set colServices = objWMIService.ExecQuery("SELECT * FROM Win32_Service"_
                  ,, wbemFlagReturnImmediately+wbemFlagForwardOnly)
For Each objService In colServices
  strResult = strResult & "Name: " & _
              objService.Name & VbCrLf
  strResult = strResult & "Display Name: " & _
              objService.DisplayName & VbCrLf
  strResult = strResult & "Caption: " & _
              objService.Caption & VbCrLf
  strResult = strResult & "Description: " & _
              objService.Description & VbCrLf
  strResult = strResult & "Path Name: " & _
              objService.PathName & VbCrLf
  strResult = strResult & "ServiceType: " & _
              objService.ServiceType & VbCrLf
  strResult = strResult & "Status: " & _
              objService.Status & VbCrLf
  strResult = strResult & "State: " & _
              objService.State & VbCrLf
  strResult = strResult & "Started: " & _
              objService.Started & VbCrLf
  strResult = strResult & "Start Mode: " & _
              objService.StartMode & VbCrLf
  strResult = strResult & "Start Name: " & _
              objService.StartName & VbCrLf
  strResult = strResult & "Accept pause: " & _
              objService.AcceptPause & VbCrLf
  strResult = strResult & "Accept stop: " & _
              objService.AcceptStop & VbCrLf
  strResult = strResult & "********************************" & VbCrLf &_
              VbCrLf
Next

' Выводим результат в текстовый файл
TextOut  strResult, "C:\Services.txt" 

'Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
'Открываем созданный файл в Блокноте
Set theNotepad = WshShell.Exec("notepad " & "C:\Services.txt" )
'************************* Конец ***********************************
Листинг 13.10. Вывод информации о всех службах Windows
Запуск и восстановление работы служб

В сценарии StartStoppedServices.vbs, описанном в листинге 13.11, производится запуск всех остановленных служб (с состоянием Stopped), которые должны стартовать автоматически при запуске системы.

'*******************************************************************
' Имя: StartStoppedServices.vbs
' Язык: VBScript
' Описание: Запуск остановленных служб 
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer       ' Имя компьютера
Dim strNamespace      ' Имя пространства имен
Dim objWMIService     ' Объект SWbemServices    
Dim colServices       ' Коллекция экземпляров класса WMI
Dim objService        ' Элемент коллекции
Dim strResult         ' Результирующая строка
Dim WshShell          ' Объект WshShell
Dim Res               

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"

' Подключаемся к пространству имен WMI
Set objWMIService = GetObject("WinMgmts:\\" & _
                                   strComputer & "\" & strNamespace)
' Формируем коллекцию остановленных служб 
Set colServices = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE State = 'Stopped' and StartMode = " _
 & "'Auto'")

' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

' Запрос на запуск служб
Res = WshShell.Popup("Запустить все остановленные службы?",0, _
  "Работа со службами Windows",vbQuestion+vbYesNo)
If Res=vbYes Then
  ' Запускаем каждую остановленную службу         
  For Each objService In colServices
    objService.StartService()
  Next
  WScript.Echo "Все остановленные службы запущены"
End If  
'************************* Конец ***********************************
Листинг 13.11. Запуск всех остановленных служб

Сценарий ResumePausedServices.vbs, приведенный в листинге 13.12, восстанавливает работу всех приостановленных служб (с состоянием Paused), которые должны стартовать автоматически при запуске системы.

'*******************************************************************
' Имя: ResumePausedServices.vbs
' Язык: VBScript
' Описание: Продолжение работы приостановленных служб 
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer       ' Имя компьютера
Dim strNamespace      ' Имя пространства имен
Dim objWMIService     ' Объект SWbemServices    
Dim colServices       ' Коллекция экземпляров класса WMI
Dim objService        ' Элемент коллекции
Dim strResult         ' Результирующая строка
Dim WshShell          ' Объект WshShell
Dim Res               

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"

' Подключаемся к пространству имен WMI
Set objWMIService = GetObject("WinMgmts:\\" & _
                                   strComputer & "\" & strNamespace)
' Формируем коллекцию остановленных служб 
Set colServices = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE State = 'Paused' and StartMode = " _
 & "'Auto'")

' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

' Запрос на запуск служб
Res = WshShell.Popup("Возобновить работу всех приостановленных служб?"_
  ,0, "Работа со службами Windows",vbQuestion+vbYesNo)
If Res=vbYes Then
  ' Возобновляем каждую приостановленную службу         
  For Each objService In colServices
    objService.ResumeService()
  Next
  WScript.Echo "Работа всех приостановленных служб возобновлена"
End If  
'************************* Конец ***********************************
Листинг 13.12. Продолжение работы всех приостановленных служб
Завершение процессов

В сценарии KillProcess.vbs, описанном в листинге 13.13, на примере Блокнота (Notepad.exe) показано, каким образом можно принудительно завершить работу запущенных процессов (для этого используется метод Terminate соответствующего объекта Win32_Process ).

'*******************************************************************
' Имя: KillProcess.vbs
' Язык: VBScript
' Описание: Завершение запущенного процесса
'*******************************************************************
Option Explicit
 
' Объявляем переменные
Dim strComputer       ' Имя компьютера
Dim strNamespace      ' Имя пространства имен
Dim objService        ' Объект SWbemServices    
Dim colProcesses      ' Коллекция экземпляров класса WMI
Dim objProcess        ' Элемент коллекции
Dim WshShell          ' Объект WshShell
Dim Res

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"

' Подключаемся к пространству имен WMI
Set objService = GetObject("WinMgmts:\\" & _
                                   strComputer & "\" & strNamespace)
'Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

' Формируем коллекцию процессов NOTEPAD.EXE
Set colProcesses = objService.ExecQuery(_
           "SELECT * FROM Win32_Process WHERE Name='NOTEPAD.EXE'")

'Запрос на завершение работы всех Блокнотов
Res=WshShell.Popup("Завершить работу всех Блокнотов?",0,_
  "Работа с процессами",vbQuestion+vbYesNo)
' Проверяем введенное значение
If Res=vbYes Then
  'Перебираем коллекцию
  For Each objProcess in colProcesses
    ' Завершаем приложение
    objProcess.Terminate()
  Next
End If
'************************* Конец ***********************************
Листинг 13.13. Принудительное завершение запущенного процесса
Получение информации о процессах

Сценарий ProcessInfo.vbs, приведенный в листинге 13.14, для всех запущенных процессов (экземпляры класса Win32_Process ) выводит в текстовый файл C:\Process.txt значения некоторых наиболее важных с точки зрения администратора параметров. Сформированный файл затем открывается с помощью Блокнота.

'*******************************************************************
' Имя: ProcessInfo.vbs
' Язык: VBScript
' Описание: Вывод свойств запущенных процессов 
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer       ' Имя компьютера
Dim strNamespace      ' Имя пространства имен
Dim objService        ' Объект SWbemServices    
Dim colProcesses      ' Коллекция экземпляров класса WMI
Dim objProcess        ' Элемент коллекции
Dim strResult         ' Результирующая строка
Dim WshShell          ' Объект WshShell
Dim theNotepad        ' Объект WshScriptExec

' Объявляем константы
Const wbemFlagForwardOnly = 32
Const wbemFlagReturnImmediately = 16
Const ForWriting = 2

' Функция для записи информации в файл 
Sub TextOut (Text, File)
  ' Объявляем переменные
  Dim  objFSO, FOut 
  ' Создаем объект FileSystemObject
  Set  objFSO=WScript.CreateObject("Scripting.FileSystemObject")
  ' Открываем выходной файл для записи
  Set  FOut = objFSO.OpenTextFile (File,ForWriting,true)
  ' Записываем текстовую строку в файл
  FOut.WriteLine Text
  ' Закрываем выходной файл
  FOut.Close
End Sub

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strResult = "Сведения о запущенных процессах " & VbCrLf & VbCrLf

' Подключаемся к пространству имен WMI
Set objService = GetObject("WinMgmts:\\" & _
                                   strComputer & "\" & strNamespace)

Set colProcesses = objService.ExecQuery("SELECT * FROM Win32_Process",,_
                     wbemFlagReturnImmediately+wbemFlagForwardOnly)
For Each objProcess In colProcesses
  strResult = strResult & "Name: " & objProcess.Name & VbCrLf &_
  "Description: " & objProcess.Description & VbCrLf &_
  "Handle: " & objProcess.Handle & VbCrLf &_
  "Parent Process Id: " & objProcess.ParentProcessId & VbCrLf &_
  "Command Line: " & objProcess.CommandLine & VbCrLf &_
  "Creation Date: " & objProcess.CreationDate & VbCrLf &_
  "Executable Path: " & objProcess.ExecutablePath & VbCrLf &_
  "Priority: " & objProcess.Priority & VbCrLf &_
  "Maximum WorkingSet Size: " & objProcess.MaximumWorkingSetSize & VbCrLf &_
  "Minimum WorkingSet Size: " & objProcess.MinimumWorkingSetSize & VbCrLf &_
  "Page File Usage: " & objProcess.PageFileUsage & VbCrLf &_
  "Peak Virtual Size: " & objProcess.PeakVirtualSize & VbCrLf &_
  "Peak WorkingSet Size: " & objProcess.PeakWorkingSetSize & VbCrLf &_
  "********************************" & VbCrLf & VbCrLf
Next

' Выводим результат в текстовый файл
TextOut  strResult, "C:\Process.txt" 

'Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
'Открываем созданный файл в Блокноте
Set theNotepad = WshShell.Exec("notepad " & "C:\Process.txt" )
'************************* Конец ***********************************
Листинг 13.14. Вывод свойств всех запущенных процессов
< Лекция 12 || Лекция 13: 12 || Лекция 14 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ.

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.