You are here

Скрипт для смены паролей локальным администраторам [PowerShell]


Скрипт для смены паролей локальным администраторам [PowerShell]

Если вы хоть когда-нибудь задумывались о безопасности в вашей сети, то наверняка вы задумывались о том, как организовать смену паролей локальных администраторов, на компьютерах под управление ОС Windows, в вашей сети.  И если задумывались и вам всегда было лень заняться этой процедурой, или не знали как это сделать, то этот пост для вас =).

Если пароль необходимо менять для одной учетной записи, то лучше всего с задачей справится штатная штука от Microsoft – LAPS (Local Administrator Password Solution). Но, к сожалению, она бессильна, если учетных записей с правами админа на компьютерах должно быть несколько. Так же она не сможет вам помочь, если ваши компьютеры не заведены в домен.

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

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

Тексты скриптов можно посмотреть на ]]>GitHub]]>.

Для работы скриптов у вас должно быть создано 2 файла - !users.txt и !hosts.txt.

В первом должен быть список администраторов и пароли к ним в csvшном формате (имя и пароль должны разделяться запятой). Например, что-то вроде:

admin1,Passw0rd
admin2,Passw0rd

Во втором должен быть список компьютеров, на которых необходимо сменить пароли. Имя каждого компьютера с новой строки. Например:

Comp1
Comp2
Comp3

Файлы эти, как и папка, где они расположены, само собой должны быть доступны только пользователю или группе, от имени которой будет запускаться скрипт. У этого же пользователя должны быть права на компьютерах для добавления и изменения пользователей. Это не обязательно должна быть сетевая папка, вполне сгодится папка, где-нибудь на сервере, от куда запускается скрипт.

Скрипт для смены паролей локальным администраторам [PowerShell] - путь не обязательно должен быть сетевой

Так же на тех компьютерах, где необходимо сменить пароли должно быть разрешено удаленное управление через PowerShell. Если эти компьютеры находятся в домене, то самое простое – создать групповую политику, которая это разрешит. Для этого нужно будет создать новый объект групповой политики, и изменить в нем несколько параметров.

1 - Путь до параметра – Computer Configuration/Policies/Administrative Templates/Windows Components/Windows Remote Management (WinRM)/WinRM Service

Параметр - Allow remote server management through WinRM. Он должен быть в состоянии Enabled.

Скрипт для смены паролей локальным администраторам [PowerShell] - разрешаем удаленное управление через групповую политику

2 - Так же необходимо, что бы на компьютерах был запущен сервис WinRM. Перевести его в состояние Autostart можно так же при помощи групповых политик. Computer Configuration – Preferences – Control Panel Settings – Services. Тут создаем новый сервис, в Service Name жмем обзор и находим нужный. В startup указываем – Automatic, в service action – start service.

Скрипт для смены паролей локальным администраторам [PowerShell] - включаем сервис через групповую политику

Скрипт для смены паролей локальным администраторам [PowerShell] - включаем сервис через групповую политику

3 – Необходимо открыть необходимые для WinRM порты в фаерволле. Опять же, если используется встроенный в Windows фаерволл, можно открыть нужные порты при помощи групповой политики. Идем по пути – Computer configuration, Policies, Windows Settings, Security Settings, Windows Firewall with Advanced Security - Windows Firewall with Advanced Security – Inbound Rules. Тут жмем создать новое правило, и выбираем в Predefined – Windows Remote Management.

Скрипт для смены паролей локальным администраторам [PowerShell] - настраиваем фаерволл через групповую политику

Скрипт для смены паролей локальным администраторам [PowerShell] - настраиваем фаерволл через групповую политику

Когда групповая политика будет обновлена на компьютерах, на них будет разрешено удаленное управление через PowerShell.

После запуска скрипта runScript.ps1 будут считываться файлы !users.txt и !hosts.txt, и данные из !users.txt будут переданы скрипту add-local-admins.ps1, команды которого выполняются на удаленных компьютерах.

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

Я там целенаправленно использую команды net user и net localgroup, что бы скрипт нормально работал на старых версиях powershell.  

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

По завершении работы результат выполнения будет записываться в папку с файлами !users и !hosts, что бы всегда знать на каком компьютере какие пароли заданы.

Скрипт для смены паролей локальным администраторам [PowerShell] - результат пишется в файлы

Надеюсь, этот скрипт окажется вам полезным.

Скрипт для смены паролей локальным администраторам [PowerShell]

2 1

Share the article with your friends in social networks, maybe it will be useful to them.


If the article helped you, you can >>thank the author<<