Этим постом мы завершаем публиковать перевод цикла статей по управлению службами 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 в формате MACHINEUSERNAME или DOMAINUSERNAME. В моем случае, 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:workresults.txt
Как вы видите, я сбросил пароль для службы MyCustomService запущенной на всех компьютерах, перечисленных в переменной $computers. Результаты сохраняются в текстовый файл, в котором указаны имя компьютера и возращенное значение. Конечно, службы нужно перезапустить, чтобы изменения вступили в силу.
Подводим итоги
Если вам необходимо осуществлять управление служебной учетной записью, то вам потребуется использовать WMI – через WMI- или CIM-командлеты. Последние гораздо проще в использовании.
Предыдущие статьи:
1. Получаем статус служб
2. Остановка, запуск, пауза
3. Конфигурируем службы с помощью WMI и CIM
4. Изменение служб с помощью WMI
5. CIM-командлеты
Автор: AMarkin