Мы рассмотрим несколько простых сценариев WMI, которые могут оказаться полезными при решении определенной задачи администратора Windows (удаленное управление работой рабочих станций, централизованная инвентаризация установленного на компьютерах оборудования и т. д.). Поняв принцип их работы, можно по аналогии составлять сценарии, работающие с другими компонентами информационной системы (естественно, при этом нужно знать, какие именно объекты WMI соответствуют тому или иному компоненту системы, и какие свойства и методы этих объектов следует задействовать в сценарии).
В листингах 13.1–13.3 приведены сценарии, которые с помощью соответствующих методов класса Win32_OperatingSystem позволяют принудительно завершить сеанс активного пользователя, перезагрузить или выключить компьютер.
Для завершения сеанса активного пользователя необходимо вызвать метод Win32Shutdown объекта Win32_OperatingSystem (листинг 13.1).
'*******************************************************************
' Имя: LogOff.vbs
' Язык: VBScript
' Описание: Завершение сеанса пользователя
'*******************************************************************
Option Explicit
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colInstances ' Коллекция экземпляров класса WMI
Dim objInstance ' Элемент коллекции
'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
' Получаем указатель на класс WMI
Set objClass = GetObject("WinMgmts:\\" strComputer _
"\" strNamespace ":" strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colInstances = objClass.Instances_
' Перебираем элементы коллекции
For Each objInstance In colInstances
' Выводим на экран предупреждение
WScript.Echo "На компьютере " objInstance.CSNAME VbCrLf _
"сеанс текущего пользователя будет завершен "
' Для каждого экземпляра вызываем метод Win32Shutdown
objInstance.Win32Shutdown(0)
Next
'************************* Конец ***********************************
Для перезагрузки компьютера необходимо использовать метод Reboot объекта Win32_OperatingSystem (листинг 13.2). При этом при подключении к подсистеме WMI необходимо указать дополнительные привилегии Shutdown (для перезагрузки локального компьютера) и RemoteShutdown (для перезагрузки удаленного компьютера).
'*******************************************************************
' Имя: Reboot.vbs
' Язык: VBScript
' Описание: Перезагрузка компьютера
'*******************************************************************
Option Explicit
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colInstances ' Коллекция экземпляров класса WMI
Dim objInstance ' Элемент коллекции
'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
' Получаем указатель на класс WMI
Set objClass = GetObject("WinMgmts:{(Shutdown,RemoteShutdown)}!\\" _
strComputer "\" strNamespace ":" strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colInstances = objClass.Instances_
' Перебираем элементы коллекции
For Each objInstance In colInstances
' Выводим на экран предупреждение
WScript.Echo "Компьютер " objInstance.CSNAME _
" будет перезагружен "
' Для каждого экземпляра вызываем метод Reboot
objInstance.Reboot()
Next
'************************* Конец ***********************************
В сценарии Shutdown.vbs (листинг 13.3) кроме непосредственного выключения компьютера (метод Shutdown объекта Win32_OperatingSystem ) с помощью средств языка VBScript реализована обработка возможных ошибок.
'*******************************************************************
' Имя: Shutdown.vbs
' Язык: VBScript
' Описание: Выключение компьютера
'*******************************************************************
Option Explicit
On Error Resume Next
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colInstances ' Коллекция экземпляров класса WMI
Dim objInstance ' Элемент коллекции
Dim iAnswer ' Код возврата функции MsgBox
'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
' Получаем указатель на класс WMI
Set objClass = GetObject("WinMgmts:{(Shutdown,RemoteShutdown)}!\\" strComputer _
"\" strNamespace ":" strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colInstances = objClass.Instances_
' Перебираем элементы коллекции
For Each objInstance In colInstances
' Выводим на экран предупреждение
iAnswer = MsgBox("Выключить компьютер " objInstance.CSNAME " ?", _
vbQuestion + vbOKCancel, "Внимание!")
If iAnswer = vbOK Then
' Выводим сообщение о перезагрузке
WScript.Echo "Компьютер " objInstance.CSNAME " будет выключен"
' Вызываем метод Shutdown
objInstance.Shutdown()
If Err.number <> 0 Then
WScript.Echo "Номер ошибки: " Err.Number vbNewLine _
"Описание: " Err.Description
End If
Else
' Выводим сообщение об отмене операции
WScript.Echo "Не будем пока выключать"
End if
Next
'************************* Конец ***********************************
Листинги 13.4–13.7 содержат сценарии, позволяющие получить информацию об операционной системе (серийный номер, номер сборки, номер последнего обновления, дата установки, кодовая страница, список команд, которые выполняются автоматически при старте системы, и т. д.) и о BIOS компьютера (производитель, серийный номер, номер сборки и т. д.).
В сценарии BIOSInfo.vbs (листинг 13.4) на экран выводятся некоторые свойства объекта Win32_BIOS, в котором хранятся параметры и характеристики BIOS, установленной на компьютере.
'*******************************************************************
' Имя: BIOSInfo.vbs
' Язык: VBScript
' Описание: Вывод информации о BIOS
'*******************************************************************
Option Explicit
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colInstances ' Коллекция экземпляров класса WMI
Dim objBIOS ' Элемент коллекции
Dim strResult ' Результирующая строка
'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_BIOS"
strResult = "Информация о BIOS :" VbCrLf
' Получаем указатель на класс WMI
Set objClass = GetObject("winmgmts:\\" strComputer _
"\" strNamespace ":" strClass)
' Создаем коллекцию экземпляров класса Win32_BIOS
Set colInstances = objClass.Instances_
' Перебираем элементы коллекции
For Each objBIOS in colInstances
strResult = strResult "Name: " objBIOS.Name VbCrLf
strResult = strResult "Manufacturer: " objBIOS.Manufacturer _
VbCrLf
strResult = strResult "Caption: " objBIOS.Caption VbCrLf
strResult = strResult "Description: " objBIOS.Description VbCrLf
strResult = strResult "Build Number: " objBIOS.BuildNumber VbCrLf
strResult = strResult "Current Language: " objBIOS.CurrentLanguage VbCrLf
strResult = strResult _
"Installable Languages: " objBIOS.InstallableLanguages VbCrLf
strResult = strResult "Primary BIOS: " objBIOS.PrimaryBIOS VbCrLf
strResult = strResult "Release Date: " objBIOS.ReleaseDate VbCrLf
strResult = strResult "Serial Number: " objBIOS.SerialNumber VbCrLf
strResult = strResult "SMBIOS Version: " _
objBIOS.SMBIOSBIOSVersion VbCrLf
strResult = strResult _
"SMBIOS Major Version: " objBIOS.SMBIOSMajorVersion VbCrLf
strResult = strResult _
"SMBIOS Minor Version: " objBIOS.SMBIOSMinorVersion VbCrLf
strResult = strResult "SMBIOS Present: " objBIOS.SMBIOSPresent _
VbCrLf
strResult = strResult "Status: " objBIOS.Status VbCrLf
strResult = strResult "Version: " objBIOS.Version VbCrLf
Next
'Выводим строку на экран
Wscript.Echo strResult
'************************* Конец ***********************************
Все команды, которые выполняются автоматически при старте системы, хранятся в 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
'************************* Конец ***********************************
Основные свойства установленной операционной системы (загрузочное устройство, номер сборки, дата установки и т. д.) можно получить с помощью объекта 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
'************************* Конец ***********************************
Сценарий 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
'************************* Конец ***********************************
С помощью сценариев 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
'************************* Конец ***********************************
В сценарии 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.10–13.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" )
'************************* Конец ***********************************
В сценарии 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
'************************* Конец ***********************************
Сценарий 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
'************************* Конец ***********************************
В сценарии 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
'************************* Конец ***********************************
Сценарий 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" )
'************************* Конец ***********************************
Мы рассмотрим несколько простых сценариев WMI, которые могут оказаться полезными при решении определенной задачи администратора Windows (удаленное управление работой рабочих станций, централизованная инвентаризация установленного на компьютерах оборудования и т. д.). Поняв принцип их работы, можно по аналогии составлять сценарии, работающие с другими компонентами информационной системы (естественно, при этом нужно знать, какие именно объекты WMI соответствуют тому или иному компоненту системы, и какие свойства и методы этих объектов следует задействовать в сценарии).
В листингах 13.1–13.3 приведены сценарии, которые с помощью соответствующих методов класса Win32_OperatingSystem позволяют принудительно завершить сеанс активного пользователя, перезагрузить или выключить компьютер.
Для завершения сеанса активного пользователя необходимо вызвать метод Win32Shutdown объекта Win32_OperatingSystem (листинг 13.1).
'*******************************************************************
' Имя: LogOff.vbs
' Язык: VBScript
' Описание: Завершение сеанса пользователя
'*******************************************************************
Option Explicit
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colInstances ' Коллекция экземпляров класса WMI
Dim objInstance ' Элемент коллекции
'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
' Получаем указатель на класс WMI
Set objClass = GetObject("WinMgmts:\\" strComputer _
"\" strNamespace ":" strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colInstances = objClass.Instances_
' Перебираем элементы коллекции
For Each objInstance In colInstances
' Выводим на экран предупреждение
WScript.Echo "На компьютере " objInstance.CSNAME VbCrLf _
"сеанс текущего пользователя будет завершен "
' Для каждого экземпляра вызываем метод Win32Shutdown
objInstance.Win32Shutdown(0)
Next
'************************* Конец ***********************************
Для перезагрузки компьютера необходимо использовать метод Reboot объекта Win32_OperatingSystem (листинг 13.2). При этом при подключении к подсистеме WMI необходимо указать дополнительные привилегии Shutdown (для перезагрузки локального компьютера) и RemoteShutdown (для перезагрузки удаленного компьютера).
'*******************************************************************
' Имя: Reboot.vbs
' Язык: VBScript
' Описание: Перезагрузка компьютера
'*******************************************************************
Option Explicit
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colInstances ' Коллекция экземпляров класса WMI
Dim objInstance ' Элемент коллекции
'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
' Получаем указатель на класс WMI
Set objClass = GetObject("WinMgmts:{(Shutdown,RemoteShutdown)}!\\" _
strComputer "\" strNamespace ":" strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colInstances = objClass.Instances_
' Перебираем элементы коллекции
For Each objInstance In colInstances
' Выводим на экран предупреждение
WScript.Echo "Компьютер " objInstance.CSNAME _
" будет перезагружен "
' Для каждого экземпляра вызываем метод Reboot
objInstance.Reboot()
Next
'************************* Конец ***********************************
В сценарии Shutdown.vbs (листинг 13.3) кроме непосредственного выключения компьютера (метод Shutdown объекта Win32_OperatingSystem ) с помощью средств языка VBScript реализована обработка возможных ошибок.
'*******************************************************************
' Имя: Shutdown.vbs
' Язык: VBScript
' Описание: Выключение компьютера
'*******************************************************************
Option Explicit
On Error Resume Next
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colInstances ' Коллекция экземпляров класса WMI
Dim objInstance ' Элемент коллекции
Dim iAnswer ' Код возврата функции MsgBox
'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
' Получаем указатель на класс WMI
Set objClass = GetObject("WinMgmts:{(Shutdown,RemoteShutdown)}!\\" strComputer _
"\" strNamespace ":" strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colInstances = objClass.Instances_
' Перебираем элементы коллекции
For Each objInstance In colInstances
' Выводим на экран предупреждение
iAnswer = MsgBox("Выключить компьютер " objInstance.CSNAME " ?", _
vbQuestion + vbOKCancel, "Внимание!")
If iAnswer = vbOK Then
' Выводим сообщение о перезагрузке
WScript.Echo "Компьютер " objInstance.CSNAME " будет выключен"
' Вызываем метод Shutdown
objInstance.Shutdown()
If Err.number <> 0 Then
WScript.Echo "Номер ошибки: " Err.Number vbNewLine _
"Описание: " Err.Description
End If
Else
' Выводим сообщение об отмене операции
WScript.Echo "Не будем пока выключать"
End if
Next
'************************* Конец ***********************************
Листинги 13.4–13.7 содержат сценарии, позволяющие получить информацию об операционной системе (серийный номер, номер сборки, номер последнего обновления, дата установки, кодовая страница, список команд, которые выполняются автоматически при старте системы, и т. д.) и о BIOS компьютера (производитель, серийный номер, номер сборки и т. д.).
В сценарии BIOSInfo.vbs (листинг 13.4) на экран выводятся некоторые свойства объекта Win32_BIOS, в котором хранятся параметры и характеристики BIOS, установленной на компьютере.
'*******************************************************************
' Имя: BIOSInfo.vbs
' Язык: VBScript
' Описание: Вывод информации о BIOS
'*******************************************************************
Option Explicit
' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colInstances ' Коллекция экземпляров класса WMI
Dim objBIOS ' Элемент коллекции
Dim strResult ' Результирующая строка
'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_BIOS"
strResult = "Информация о BIOS :" VbCrLf
' Получаем указатель на класс WMI
Set objClass = GetObject("winmgmts:\\" strComputer _
"\" strNamespace ":" strClass)
' Создаем коллекцию экземпляров класса Win32_BIOS
Set colInstances = objClass.Instances_
' Перебираем элементы коллекции
For Each objBIOS in colInstances
strResult = strResult "Name: " objBIOS.Name VbCrLf
strResult = strResult "Manufacturer: " objBIOS.Manufacturer _
VbCrLf
strResult = strResult "Caption: " objBIOS.Caption VbCrLf
strResult = strResult "Description: " objBIOS.Description VbCrLf
strResult = strResult "Build Number: " objBIOS.BuildNumber VbCrLf
strResult = strResult "Current Language: " objBIOS.CurrentLanguage VbCrLf
strResult = strResult _
"Installable Languages: " objBIOS.InstallableLanguages VbCrLf
strResult = strResult "Primary BIOS: " objBIOS.PrimaryBIOS VbCrLf
strResult = strResult "Release Date: " objBIOS.ReleaseDate VbCrLf
strResult = strResult "Serial Number: " objBIOS.SerialNumber VbCrLf
strResult = strResult "SMBIOS Version: " _
objBIOS.SMBIOSBIOSVersion VbCrLf
strResult = strResult _
"SMBIOS Major Version: " objBIOS.SMBIOSMajorVersion VbCrLf
strResult = strResult _
"SMBIOS Minor Version: " objBIOS.SMBIOSMinorVersion VbCrLf
strResult = strResult "SMBIOS Present: " objBIOS.SMBIOSPresent _
VbCrLf
strResult = strResult "Status: " objBIOS.Status VbCrLf
strResult = strResult "Version: " objBIOS.Version VbCrLf
Next
'Выводим строку на экран
Wscript.Echo strResult
'************************* Конец ***********************************
Все команды, которые выполняются автоматически при старте системы, хранятся в 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
'************************* Конец ***********************************
Основные свойства установленной операционной системы (загрузочное устройство, номер сборки, дата установки и т. д.) можно получить с помощью объекта 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
'************************* Конец ***********************************
Сценарий 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
'************************* Конец ***********************************
С помощью сценариев 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
'************************* Конец ***********************************
В сценарии 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.10–13.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" )
'************************* Конец ***********************************
В сценарии 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
'************************* Конец ***********************************
Сценарий 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
'************************* Конец ***********************************
В сценарии 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
'************************* Конец ***********************************
Сценарий 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" )
'************************* Конец ***********************************
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.