Задачи WMI: службы

Задачи WMI для служб получают сведения о службах, включая зависимые или предшествующие службы. Другие примеры см. в центре сценариев TechNet по адресу https://www.microsoft.com/technet.

Примеры скриптов, показанные в этом разделе, получают данные только с локального компьютера. Дополнительные сведения о том, как использовать скрипт для получения данных с удаленных компьютеров, см. в статье Подключение к WMI на удаленном компьютере.

В следующей процедуре описывается выполнение скрипта.

Запуск сценария

  1. Скопируйте код и сохраните его в файл с расширением VBS, например filename.vbs. Убедитесь, что текстовый редактор не добавляет в файл расширение .txt.
  2. Откройте окно командной строки и перейдите в каталог, в котором сохранен файл.
  3. Введите cscript filename.vbs в командной строке.
  4. Если вы не можете получить доступ к журналу событий, проверка, чтобы узнать, выполняется ли вы из командной строки с повышенными привилегиями. Некоторые журналы событий, например журнал событий безопасности, могут быть защищены средствами управления доступом пользователей (UAC).

Примечание

По умолчанию cscript отображает выходные данные скрипта в окне командной строки. Так как скрипты WMI могут создавать большие объемы выходных данных, может потребоваться перенаправить выходные данные в файл. Введите cscript filename.vbs > outfile.txt в командной строке, чтобы перенаправить выходные данные скриптаfilename.vbs наoutfile.txt.

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

Часто выполняемые действия в новом интерфейсе Классы или методы WMI
... определить, какие службы запущены, а какие нет? Используйте класс Win32_Service для проверка состояния всех служб. Свойство состояния позволяет узнать, остановлена или запущена служба.
VB
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service",,48) 
For Each objItem in colItems 
    Wscript.Echo "Service Name: " & objItem.Name & VBNewLine & "State: " & objItem.State
Next
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | format-list Name, State
... запретить опытным пользователям запускать определенные службы?

Используйте класс Win32_Service и метод ChangeStartMode , чтобы задать для свойства StartMode значение Disabled. Отключенные службы не могут быть запущены, и по умолчанию опытные пользователи не могут изменить режим запуска службы.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where StartMode = 'Manual'")
For Each objService in colServiceList
    errReturnCode = objService.Change( , , , , "Disabled")
    WScript.Echo "Changed manual service to disabled: " & objService.Name   
Next
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.startMode -eq "Manual"} | `
    foreach-object { [void]$_.changeStartMode('Disabled') }
... запуск и остановка служб?

Используйте класс Win32_Service и методы StopService и StartService .

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='Alerter'")
For Each objService in colListOfServices
    objService.StartService()
    Wscript.Echo "Started Alerter service"
Next
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.Name -eq "Alerter"} | `
    foreach-object { [void]$_.StartService() }
... изменить пароли учетной записи службы с помощью скрипта?

Используйте класс Win32_Service и метод Change .

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service")
For Each objservice in colServiceList
    If objService.StartName = ".\netsvc" Then
        errReturn = objService.Change( , , , , , , , "password")  
    End If 
Next
.. определить, какие службы можно остановить?

Используйте класс Win32_Service и проверка значение свойства AcceptStop.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service Where AcceptStop = True")
For Each objService in colServices
    Wscript.Echo objService.DisplayName 
Next
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.AcceptStop -eq "True"} | `
     format-list DisplayName
... Найти службы, которые должны быть запущены перед запуском службы DHCP?

Запрос asSOCIATORSкласса Win32_Service с именем DHCP, которые находятся в классе Win32_DependentService и имеют значение "Dependent" в свойстве Role . Роль означает роль службы DHCP. В этом случае она зависит от других запущенных служб.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators Of " _ 
    & "{Win32_Service.Name='dhcp'} Where " _
    & "AssocClass=Win32_DependentService " _
    & "Role=Dependent") 
For Each objService in colServiceList
Wscript.Echo objService.DisplayName 
Next
PowerShell
$query = "Associators Of {Win32_Service.Name='dhcp'} Where AssocClass=Win32_DependentService Role=Dependent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list DisplayName
... Найти службы, для которых служба WMI (Winmgmt) должна быть запущена перед запуском?

Запросите ASSOCIATORSкласса Win32_Service с именем DHCP, которые находятся в классе Win32_DependentService и имеют "Antecendent" в свойстве Role . Роль означает роль службы rasman. В этом случае она должна быть запущена перед зависимыми службами.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\ & strComputer & "\root\cimv2")
Set colServiceList = _
    objWMIService.ExecQuery("Associators of " _
    & "{Win32_Service.Name='winmgmt'} Where " _
    & "AssocClass=Win32_DependentService " _
    & "Role=Antecedent" )
For Each objService in colServiceList
Wscript.Echo "Name: " & objService.Name & VBTab & "Display Name: " & objService.DisplayName 
Next
PowerShell
$query = "Associators of {Win32_Service.Name='winmgmt'} Where AssocClass=Win32_DependentService Role=Antecedent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list Name, DisplayName

Задачи WMI для сценариев и приложений

Примеры приложений WMI C++

Центр сценариев TechNet

`