Управляем службами Windows с помощью PowerShell. Часть 6. Служебные учетные записи

от автора


Этим постом мы завершаем публиковать перевод цикла статей по управлению службами Windows с помощью PowerShell, которые выходят на сайте 4sysops.com. В предыдущем посте было рассмотрено как осуществлять управление службами Windows в Server 2012 c помощью CIM-командлетов, представленных в PowerShell 3.0. В этом посте мы рассмотрим, как осуществлять управление служебными учетными записями с помощью WMI- и CIM-командлетов.
Итак, под катом приведен перевод статьи с портала 4sysops.com Managing Services the PowerShell way – Part 8

Предыдущие статьи:
Управляем службами Windows с помощью PowerShell. Часть 1. Получаем статус служб
Управляем службами Windows с помощью PowerShell. Часть 2. Остановка, запуск, пауза
Управляем службами Windows с помощью PowerShell. Часть 3. Конфигурируем службы с помощью WMI и CIM
Управляем службами Windows с помощью PowerShell. Часть 4. Изменение служб с помощью WMI
Управляем службами Windows с помощью PowerShell. Часть 5. CIM-командлеты

Используем WMI

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

PS C:\> get-wmiobject win32_service -filter "name='yammmsvc'" | Select name,startname  name                                              startname ----                                              --------- YammmSvc                                          .\Jeff 

В этом посте мы рассматривали, что для этих целей можно использовать метод Change() для изменения пароля служебной учетной записи. Также помним, что параметры Invoke-WmiMethod не следует задокументированному на MSDN порядку.

PS C:\> $svc = get-wmiobject win32_service -filter "name='yammmsvc'" PS C:\> $svc.GetMethodParameters("change")  __GENUS                    : 2 __CLASS                    : __PARAMETERS __SUPERCLASS               : __DYNASTY                  : __PARAMETERS __RELPATH                  : __PROPERTY_COUNT           : 11 __DERIVATION               : {} __SERVER                   : __NAMESPACE                : __PATH                     : DesktopInteract            : DisplayName                : ErrorControl               : LoadOrderGroup             : LoadOrderGroupDependencies : PathName                   : ServiceDependencies        : ServiceType                : StartMode                  : StartName                  : StartPassword              : PSComputerName             : 

Пароль находится на 11 месте. А это значит, что нам необходимо вставить пустые значения для 10 предыдущих параметров, которые не меняются.

PS C:\> $svc | Invoke-WmiMethod -Name Change -ArgumentList @($null,$null,$null,$null,$null,$null,$null,$null,$null,$null,"P@ssw0rd")  __GENUS          : 2 __CLASS          : __PARAMETERS __SUPERCLASS     : __DYNASTY        : __PARAMETERS __RELPATH        : __PROPERTY_COUNT : 1 __DERIVATION     : {} __SERVER         : __NAMESPACE      : __PATH           : ReturnValue      : 0 PSComputerName   : 

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

PS C:\> $svc | Invoke-WmiMethod -Name Change -ArgumentList @($null,$null,$null,$null,$null,$null,$null,$null,$null,"LocalSystem","P@ssw0rd") 

Также нам необходимо установить первоначальный пароль для системных учетных записей.

Используем CIM

Однако гораздо проще использовать CIM-командлеты для решения подобных задач. Еще раз поменяем учетную запись и пароль для службы.

 PS C:\> Get-CimInstance win32_service -filter "name='yammmsvc'" | Invoke-CimMethod -Name Change -Arguments @{StartName=".\Jeff";StartPassword="P@ssw0rd"} 

И снова возращенное значение должно быть равно 0. Введите startname в формате MACHINE\USERNAME или DOMAIN\USERNAME. В моем случае, Jeff – это локальная учетная запись. Если Вы хотите только изменить пароль, вам необходимо лишь откорректировать аргумент в хеш-таблице.
Отметим, что вы можете выполнить запрос и изменить его с помощью Invoke-CimMethod. Объект в него передавать не надо.

PS C:\> Invoke-CimMethod -Name Change -Arguments {StartName=".\Jeff";StartPassword="P@ssw0rd"} -Query "Select * from Win32_Service where name='yammmsvc'" –Computername JeffPC 

Хотя запустить команду можно было и локально, я решил показать ее запуск на удаленном компьютере. Ниже приведен пример для изменения службы на нескольких компьютерах.

PS C:\> Invoke-CimMethod -Name Change -Arguments @{StartPassword="P@ssw0rd"} -Query "Select * from Win32_service where name='MyCustomService'" –computername $computers | out-file c:\work\results.txt 

Как вы видите, я сбросил пароль для службы MyCustomService запущенной на всех компьютерах, перечисленных в переменной $computers. Результаты сохраняются в текстовый файл, в котором указаны имя компьютера и возращенное значение. Конечно, службы нужно перезапустить, чтобы изменения вступили в силу.

Подводим итоги

Если вам необходимо осуществлять управление служебной учетной записью, то вам потребуется использовать WMI – через WMI- или CIM-командлеты. Последние гораздо проще в использовании.

Предыдущие статьи:
1. Получаем статус служб
2. Остановка, запуск, пауза
3. Конфигурируем службы с помощью WMI и CIM
4. Изменение служб с помощью WMI
5. CIM-командлеты

ссылка на оригинал статьи http://habrahabr.ru/company/netwrix/blog/170263/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *