sergey vasin

The IT blog

Используем PowerShell для получения списка незапустившихся служб – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об использовании Windows PowerShell для получения незапущенных служб с режимом запуска «Auto».

Q: Привет. У меня есть сервер в удаленном офисе, на котором работает SharePoint. Я не знаю точно какой версии, но я не думаю, что проблема в нем, так как он нормально работает. Проблема в том, что сотрудники используют его каждый день – они обновляют копии их файлов Excel, в которых отображается их ежедневная деятельность. Сервер довольно старый и загрузка памяти составляет около 100%, а процессора 90%. Сегодня мне позвонил менеджер и сказал, что они не могут получить доступ к SharePoint. Я попытался подключиться к серверу по протоколу RDP, но вследствие высокой нагрузки на сервер и довольно медленного соединения, я бросил эту затею. Я думаю, что мне стоит получить список служб, чтобы определить, какие из них запущены, а какие нет, и получить коды ошибок.

Получаем StartMode и ExitCode для служб

Мне нравится использовать командлет Get-Service. На самом деле, Get-Service – это командлет, который я использую для разного рода демонстраций. Почему? Его довольно просто использовать и он выводит массу полезной информации. Я использую его каждый раз, когда провожу демонстрацию для администраторов, которые раньше не видели Windows PowerShell. К счастью их количество уменьшается с огромной скоростью и я все реже выступаю перед людьми, никогда раньше не видевшими Windows PowerShell.

Однако, командлет Get-Service не выводит некоторую информацию, которая может быть чрезвычайно полезной при траблшутинге: это StartMode (режим запуска), StartName (имя учетной записи, под которой запускается служба) и ExitCode (код ошибки). Для получения этой информации нам нужно воспользоваться классом WMI Win32_Service.

Получаем список запущенных и остановленных служб

Получить список запущенных и остановленных служб можно при помощи командлета Get-Service – он поддерживает параметр ComputerName и может выполнять запросы к удаленным компьютерам (в зависимости от настройка межсетевого экрана).

Следующий пример использует командлет Windows PowerShell 3.0 Get-CimInstance для получения списка служб (как запущенных, так и нет) на удаленном компьютере.

Get-CimInstance win32_service -computer sql1 | Sort state | select name, state

Команда и ее результаты приведены на рисунке ниже.

01

При использовании Windows PowerShell 2.0, единственное изменение, которое необходимо сделать – это заменить командлет Get-CimInstance на Get-WMIObject.

Get-WmiObject win32_service -computer sql1 | Sort state | select name, state

Заметка: Когда заменяете командлет Get-WMIObject на Get-CimInstance, помните о том, что командлет Get-WMIObject использует параметр –Class, а Get-CimInstance – параметр –ClassName. Однако в обоих случаях можно указать –Class (или не указывать имя параметра вообще, так как это позиционный параметр) – и это сработает. Проблема может возникнуть при изменении командлета Get-CimInstance на Get-WMIObject, если параметр –ClassName указан в своем полном формате.

Получаем имена учетных записей, коды ошибок и режим запуска

Для получения более полезной для траблшутинга информации, нужно отфильтовать ее таким образом, чтобы она содержала данные относительно того, почему служба не запустилась. В первую очередь мне интересно получить список служб, режим запуска которых установлен в «Auto», однако они по какой-то причине не запущены. Для этого я использую следующий фильтр.

-Filter «startmode = ‘auto’ AND state != ‘running'»

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

15:42 C:\> Get-CimInstance win32_service -Filter «startmode = ‘auto’ AND state != ‘running'» -ComputerName sql1 | select name, startname, exitcode

name startname exitcode

—- ——— ———

FIMSynchronizationService Administrator@iammred.net 1066

MSSQLServerADHelper100 NT AUTHORITY\NETWORKSERVICE 1066

RemoteRegistry NT AUTHORITY\LocalService 0

sppsvc NT AUTHORITY\NetworkService 0

SQLAgent$SHAREPOINT NT AUTHORITY\NETWORK SER… 0

На Windows PowerShell 2.0 код будет следующим.

Get-WmiObject win32_service -Filter «startmode = ‘auto’ AND state != ‘running'» -ComputerName sql1 | select name, startname, exitcode

Если код ошибки равен 0, это означает, что при остановке службы не произошло ошибки. Некоторые службы запускаются, затем останавливаются и не запускаются до тех пор, пока они не понадобятся. Если мне нужны службы с кодом не равным 0, мне нужно добавить в фильтр еще одно условие.

-Filter «startmode = ‘auto’ AND state != ‘running’ AND Exitcode !=0 »

Полная команда приведена ниже (это одна команда, разделенная на две строки)

Get-CimInstance win32_service -Filter «startmode = ‘auto’ AND state != ‘running’ AND Exitcode !=0 » -ComputerName sql1 | select name, startname, exitcode

При использовании PowerShell 2.0 команда будет следующей.

Get-wmiobject win32_service -Filter «startmode = ‘auto’ AND state != ‘running’ AND Exitcode !=0 » -ComputerName sql1 | select name, startname, exitcode

Обе команды и их вывод приведены на рисунке ниже.

02

Это все, что касается использования Windows PowerShell для проверки статуса служб.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/18/use-powershell-to-find-non-starting-automatic-services.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Декабрь 30, 2012 в 13:29

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with , ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s