Pull to refresh
0

Управляем службами Windows с помощью PowerShell. Часть 3. Конфигурируем службы с помощью WMI и CIM

Reading time 4 min
Views 23K
Original author: Jeff Hicks

Продолжаем публиковать переводы статей, выходящих на портале 4sysops.com, посвященных управлению службами Windows с помощью PowerShell. В двух предыдущих постах были рассмотрены вопросы получения статуса служб на локальном и удаленном компьютерах (здесь) и базовые моменты управления службами (запуск, остановка, пауза и прочее – здесь). В этом посте будет рассказано, как использовать WMI и CIM для целей конфигурирования служб на удаленных компьютерах.

Предыдущие статьи:
Управляем службами Windows с помощью PowerShell. Часть 1. Получаем статус служб
Управляем службами Windows с помощью PowerShell. Часть 2. Остановка, запуск, пауза


В последней статье я показал пару примеров использования Set-Service для конфигурирования служб. Однако здесь имеются некоторые ограничения, особенно когда мы работаем со службами на удаленных машинах. Частично это обусловлено тем, что такие командлеты как Get-Service и Set-Service предназначены для работы с объектом службы, который выражен через .NET Framework — System.ServiceProcess.ServiceController. С позиций администратора в таком определении объекта отсутствует ряд полезной информации, например, под какой учетной записью запущена служба. К счастью, здесь нам на помощь приходит Windows Management Instrumentation (WMI).

Используем WMI


Мы можем использовать Get-WmiObject для извлечения экземпляра объекта службы. Я продемонстрирую в PS 3.0 на Windows 8, но та же самая команда должна работать и PS 2.0. Найдем те службы, у которых класс — Win32_Service.

PS C:\> get-wmiobject win32_service | format-table



Я отформатировал вывод команды, чтобы его было легче читать. А теперь давайте взглянем на отдельную службу.

PS C:\> get-wmiobject win32_service -filter "name='bits'"
ExitCode : 0
Name : BITS
ProcessId : 876
StartMode : Auto
State : Running
Status : OK


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

PS C:\> get-wmiobject win32_service -filter "name='bits'" | Select *


Вывод показан на скриншоте.



Теперь вы знаете свойства службы, и можете создавать уточняющие запросы, используя параметр–Filter.

Получаем тип автозагрузки



Свойство StartMode показывает, стартует ли служба автоматически или должна запускаться вручную. Когда вы это узнаете, то можете использовать следующие команды:

PS C:\> get-wmiobject win32_service -filter "StartMode <>'disabled'" | sort StartMode | format-table -GroupBy StartMode -Property Name,State,PathName -AutoSize


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

PS C:\> get-wmiobject win32_service -filter "startmode='auto' AND state<>'Running'" | Select Name,State
Name State
---- -----
MMCSS Stopped
RemoteRegistry Stopped
sppsvc Stopped
wuauserv Stopped


Я запрашиваю информацию о локальных службах, но то же самое можно сделать и на удаленных машинах

PS C:\> get-wmiobject win32_service -filter "startmode='auto' AND state<>'Running'" -computername chi-dc01,chi-dc02,chi-dc03 | Select Name,State,Systemname
Name State Systemname
---- ----- ----------
sppsvc Stopped CHI-DC01
sppsvc Stopped CHI-DC02
VMTools Stopped CHI-DC02
RemoteRegistry Stopped CHI-DC03
ShellHWDetection Stopped CHI-DC03
sppsvc Stopped CHI-DC03
wuauserv Stopped CHI-DC03


Получаем учетную запись, под которой запущена служба



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

PS C:\> get-wmiobject win32_service -comp chi-ex01 | group startname
Count Name Group
----- ---- -----
95 localSystem {\\CHI-EX01\root\cimv2:Win32_Service.Name="AeLook...
36 NT AUTHORITY\LocalService {\\CHI-EX01\root\cimv2:Win32_Service.Name="ALG", ...
24 NT AUTHORITY\NetworkSe... {\\CHI-EX01\root\cimv2:Win32_Service.Name="aspnet...


И конечно, вы можете осуществить фильтрацию по этому свойству.



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

PS C:\> get-wmiobject win32_service -computer $computers -filter "startname like '%administrator%'"| Select Name,startmode,state,startname,systemname
Name : BITS
startmode : Manual
state : Stopped
startname : .\Administrator
systemname : CHI-EX01
Name : PeerDistSvc
startmode : Manual
state : Stopped
startname : Administrator@GLOBOMANTICS.local
systemname : CHI-WIN8-01


С помощью одной простой команды я нашел те службы, которые запущены под определенной учетной записью администратора.

Используем CIM



В PowerShell 3.0 вы можете использовать командлеты CIM, чтобы осуществлять те же самые запросы. Преимущества CIM связаны с удаленной работой с PowerShell.

PS C:\> get-ciminstance win32_service -comp chi-dc01




Фильтры работают аналогичным образом.

PS C:\> get-ciminstance win32_service -filter "startmode='auto' AND state<>'Running'" -comp chi-ex01 | Select Name,State,Systemname
Name State Systemname
---- ----- ----------
clr_optimization_v4.0.30319_32 Stopped CHI-EX01
clr_optimization_v4.0.30319_64 Stopped CHI-EX01
MSExchangeProtectedServiceHost Stopped CHI-EX01
MSExchangeRPC Stopped CHI-EX01
MSExchangeSA Stopped CHI-EX01
MSExchangeServiceHost Stopped CHI-EX01
ShellHWDetection Stopped CHI-EX01
sppsvc Stopped CHI-EX01


Как можно видеть в выводе, имеются некоторые проблемы с Exchange. С ними и ими подобными мы будем разбираться в следующей статье.

Итог


Использование WMI или CIM – хороший способ получить отчеты о конфигурации служб в вашей среде. Класс Win32_Service содержит в себе много полезной информации. Плюс Вы можете запускать длительные запросы (long running queries) с параметром –Asjob или использовать альтернативные учетные данные. Вы всегда можете это сделать с помощью Get-Service, но это отнимает много времени. В следующей статье мы рассмотрим, как менять службы с помощью WMI и CIM.

Upd:
В посте приведен перевод статьи с портала 4sysops.com
Managing Services the PowerShell way – Part 5

Предыдущие статьи:
Управляем службами Windows с помощью PowerShell. Часть 1. Получаем статус служб
Управляем службами Windows с помощью PowerShell. Часть 2. Остановка, запуск, пауза
Tags:
Hubs:
+11
Comments 0
Comments Leave a comment

Articles

Information

Website
www.netwrix.ru
Registered
Founded
2006
Employees
101–200 employees
Location
США