Работа с утилитами командной строки RSAT
Для управления контроллерами домена на базе Эллес в удаленном режиме могут использоваться утилиты командной строки, развернутые в составе набора компонентов Remote Server Administration Tools (RSAT) на участниках домена под управлением ОС Windows Server или ОС Windows.
Их применение в скриптах PowerShell вместо командлетов, предоставляемых модулем ActiveDirectory, позволяет администраторам автоматизировать задачи управления объектами службы каталогов Эллес, в том числе путем доработки существующих скриптов для работы с Active Directory.
Установка компонентов RSAT
Компоненты RSAT доступны на ОС Windows Server 2012 R2, 2016, 2019, 2022 (с ограничениями на Windows Server 2008 R2 и 2012) и ОС Windows 10 и 11 редакций Professional и Enterprise.
Установка на ОС Windows Server
Компоненты RSAT входят в состав дистрибутива серверных ОС семейства Windows.
Утилиты командной строки доступны по умолчанию после установки на сервере роли Active Directory Domain Services (AD DS).
Для установки набора компонентов RSAT на сервере с помощью Server Manager:
-
В строке меню Server Manager нажмите Manage и выберите Add Roles and Features.
-
В окнах шагов мастера нажимайте Next до шага Features.
-
На шаге Features в списке компонентов установите флажок в строке AD DS and AD LDS Tools.
Рис. 1. Добавление компонентов RSAT в Server Manager на ОС Windows Server -
Нажмите Next.
-
Нажмите Install в окне подтверждения.
Также для установки компонентов RSAT на сервере с ОС Windows Server может использоваться командлет Install-WindowsFeature. Для этого выполните в консоли PowerShell:
Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature
Установка на ОС Windows
Для установки компонентов RSAT на ОС Windows 10 (версии 1809 и выше) и 11 редакций Professional и Enterprise добавьте соответствующую возможность в настройках системы (требуется подключение к интернету):
-
Нажмите Windows Key + I, чтобы открыть окно настроек Windows.
-
В поле поиска наберите "Add an optional features" и нажмите на ссылку в результатах поиска.
-
В окне Optional features нажмите на область Add a feature.
-
В поле ввода наберите "RSAT" и выберите пункт RSAT: Active Directory Domain Services and Lightweight Directory Services.
Рис. 2. Добавление компонентов RSAT в настройках Windows -
Нажмите Install и следуйте инструкциям.
Также для установки компонентов RSAT на ОС Windows может использоваться командлет Add-WindowsCapability. Для этого выполните в консоли PowerShell, запущенной от имени администратора:
Add-WindowsCapability –online –Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Для установки на ОС Windows 10 версий до 1809 скачайте пакет компонентов RSAT из Microsoft Download Center, запустите файл .msu и следуйте инструкциям.
Состав утилит, поддерживаемые объекты, синтаксис
В частности, вместе с оснастками для управления службами Active Directory в составе компонентов RSAT устанавливается следующий набор утилит командной строки:
-
dsquery— поиск объекта в каталоге по заданным условиям; -
dsadd— добавление объекта в каталог; -
dsget— получение атрибутов объекта; -
dsmod— изменение атрибутов объекта; -
dsmove— перемещение объекта внутри домена; -
dsrm— удаление объекта из каталога.
В таблице Табл. 1 приводится список объектов каталога, с которыми работает каждая утилита.
| Объект | dsquery | dsadd | dsget | dsmod | dsmove | dsrm |
|---|---|---|---|---|---|---|
Computer |
+ |
+ |
+ |
+ |
+ |
+ |
Contact |
+ |
+ |
+ |
+ |
+ |
+ |
Group |
+ |
+ |
+ |
+ |
+ |
+ |
OU |
+ |
+ |
+ |
+ |
+ |
+ |
Server |
+ |
- |
+ |
+ |
+ |
+ |
User |
+ |
+ |
+ |
+ |
+ |
+ |
Subnet |
+ |
- |
+ |
- |
+ |
+ |
Site |
+ |
- |
+ |
- |
+ |
+ |
Quota |
+ |
+ |
+ |
+ |
+ |
+ |
Partition |
+ |
- |
+ |
+ |
+ |
+ |
Пример синтаксиса вызова утилиты командной строки:
dsadd user “cn=Ivan Ivanov,ou=HQEmployees,dc=domain,dc=name” -disabled no –pwd KtfdKqhu6x -mustchpwd yes -memberof cn=Sales,ou=HQEmployees,dc=domain,dc=name -acctexpires never
В результате вызова утилиты dsadd в примере создается учетная запись пользователя в указанном подразделении и устанавливается временный пароль, который пользователь должен будет сменить при входе в домен. Также пользователь добавляется в указанную группу в том же подразделении.
В примере используются параметры:
-
-disabled— признак возможности входа в домен с использованием созданной учетной записи (noв примере — вход разрешен); -
–pwd— пароль для учетной записи; -
-mustchpwd— признак необходимости смены пароля при входе в домен (yesв примере – смена обязательна); -
-memberof— добавление учетной записи в указанные группы (в примере пользователь добавляется в группу Sales в подразделении HQEmployees); -
-acctexpires— период действия учетной записи (neverв примере — период действия не ограничен).
Для получения информации о доступных подкомандах и их параметрах используйте следующий синтаксис:
dsrm /? dsadd group /?
Автоматизация типовых задач администрирования
В таблице Табл. 2 приводятся примеры некоторых типов задач администрирования, для автоматизации которых вместо командлетов PowerShell могут использоваться утилиты командной строки.
| Типовая задача администрирования | Командлет PowerShell | Команда для вызова утилиты командной строки |
|---|---|---|
Создание нового пользователя |
|
|
Поиск пользователя по атрибуту sAMAccountName или уникальному имени (DN) и просмотр его атрибутов |
|
|
Разблокировка учетной записи пользователя |
|
|
Отключение учетной записи пользователя |
|
|
Удаление учетной записи пользователя |
|
|
Сброс пароля пользователя |
|
|
Получение информации о группах, в которые входит пользователь |
|
|
Добавление пользователя в группу |
|
|
Получение информации о составе группы |
|
|
Перемещение пользователя в подразделение |
|
|
Получение списка подсетей леса |
|
|
Пример использования в скрипте PowerShell
Для демонстрации возможных замен командлетов PowerShell вызовами утилит командной строки далее приводится скрипт, который создает в каталоге учетные записи пользователей.
Скрипт автоматизирует следующие операции:
-
Считывает информацию о новых пользователей из указанного файла в текстовом формате.
-
Создает учетные записи пользователей на основе информации из файла.
-
Добавляет пользователей в указанные в файле группы.
В процессе работы скрипта формируется файл отчета о результатах работы в том же каталоге, в котором находится файл со списком пользователей.
Скрипт может работать в двух режимах — используя командлеты PowerShell модуля ActiveDirectory или вызывая утилиты командной строки RSAT.
Перед использованием скрипта:
-
Создайте текстовый файл в кодировке UTF-8, в котором каждая строка содержит следующий набор полей, разделенных символами табуляции: Ф. И. О., имя учетной записи (sAMAccountName), компания, email, пароль, группа.
Пример файла users.txt:
Иван Иванович Иванов IvanovII "ООО ""Дивный сад""" Ivan.Ivanov@divnysad.ru KtfdKqhu6x INNO-Sputnik-Russia-Users-SRC Ахмедова Диана Расуловна AkhmedovaDR "ООО ""TEMIR QAHRAMON""" Diana.Akhmedova@temirqahramon.uz T8YnJzqtir INNO-Sputnik-Uzbekistan-Users-SRC Роман Романович Романов RomanovRR "ООО ""Минск-13""" Roman.Romanov@minsk13.ru 4WE5pTUTNH INNO-Sputnik-Belarus-Users-SRC
-
Создайте в корне домена подразделение с двумя дочерними подразделениями
UsersиGroupsлюбым доступным способом.Например, используйте утилиту
dsaddна участнике домена под управлением ОС Windows с установленными компонентами RSAT, указав при необходимости адрес сервера контроллера домена и данные учетной записи с правами администратора домена:PS C:\Users\Administrator> dsadd ou ou=INNOTECH,dc=domain,dc=name -s 172.19.172.147 -u Administrator -p P@ssw0rd dsadd succeeded:ou=INNOTECH,dc=domain,dc=name PS C:\Users\Administrator> dsadd ou ou=Groups,ou=INNOTECH,dc=domain,dc=name -s 172.19.172.147 -u Administrator -p P@ssw0rd dsadd succeeded:ou=Groups,ou=INNOTECH,dc=domain,dc=name PS C:\Users\Administrator> dsadd ou ou=Users,ou=INNOTECH,dc=domain,dc=name -s 172.19.172.147 -u Administrator -p P@ssw0rd dsadd succeeded:ou=Users,ou=INNOTECH,dc=domain,dc=name
-
Убедитесь, что подразделения созданы корректно:
-
на участнике домена под управлением ОС Windows:
PS C:\Users\Administrator> dsquery ou ou=INNOTECH,dc=domain,dc=name -s 172.19.172.147 -u Administrator -p P@ssw0rd "OU=INNOTECH,DC=domain,DC=name" "OU=Groups,OU=INNOTECH,DC=domain,DC=name" "OU=Users,OU=INNOTECH,DC=domain,DC=name"
-
на контроллере домена Эллес:
samba-tool ou listobjects OU=INNOTECH -H ldap://elles-dc.domain.name --use-kerberos-required OU=Users,OU=INNOTECH OU=Groups,OU=INNOTECH
-
Запустите скрипт одним из двух способов:
-
отредактируйте приведенный ниже текст скрипта, указав требуемые значения в блоке параметров в соответствии с комментариями, и выполните его в терминале Windows PowerShell или среде Windows PowerShell ISE на участнике домена под управлением ОС Windows:
Пример скрипта для добавления учетных записей пользователей из файла
#$MODE = 1 # Раскомментируйте, чтобы использовать командлеты PowerShell # для создания объектов на WIN DC. $MODE = 2 # Раскомментируйте, чтобы использовать утилиты командной строки # для создания объектов на ELLES DC и WIN DC. $ServAddr = "172.19.172.147" # Укажите IP-адрес или FQDN сервера контроллера домена # (WIN DC, если MODE = 1; ELLES DC, если MODE = 2). $Admacc = "ROOT\Administrator" # Укажите учетную запись с правами администратора домена. $AdmPass = "P@ssw0rd" # Укажите пароль учетной записи. $UsersFile = "c:\Temp\users.txt" # Укажите путь к файлу с данными пользователей и его имя. #$HeadLine = $True # Раскомментируйте, если первая строка файла содержит названия полей. $HQ = "INNOTECH" # Укажите имя созданного подразделения, # в которое будут добавлены пользователи и группы. $Tab = "`t" $UsersTXT = Get-Content -Path $UsersFile -encoding UTF8 $Logdir = "" if ($UsersFile.contains(“\”)) { $i = $UsersFile.LastIndexOf("\") $Logdir = $UsersFile.Substring(0,$i+1) } $Log = $Logdir+"AddUsers.log" get-date -Format d.M.yyyy.hh.mm > $Log # Получаем имя домена в форматах DN & FQDN Switch ($MODE) { 1 { # WIN $Domain =(get-addomain).DistinguishedName $DNSRoot = (get-addomain).DNSRoot } 2 { # ELLES $DNSRoot = & cmd.exe /C ECHO %USERDNSDOMAIN% $Domain = "DC="+$DNSRoot.Replace(".",",DC=") } } # end Switch $UsersOU ="OU=Users,OU="+$HQ+","+$Domain $GroupsOU ="OU=Groups,OU="+$HQ+","+$Domain $Users = @() $i = 0 :GetByString foreach ($string in $UsersTXT) { $i +=1 if (($i -eq 1) -and $HeadLine) { Continue GetByString } $User = "" | select FIO,Account,Company,Email,Pass,Group $Fields = $string.split($Tab) $User.FIO = $Fields[0] -Replace '\s+', ' ' # Replace multiple white space $User.Account = $Fields[1] $User.Company = $Fields[2] $User.Email = $Fields[3] $User.Pass = $Fields[4] $User.Group = $Fields[5] $FIO = $Fields[0].Split(" ") $UPN = $User.Account + "@" + $DNSRoot if ($FIO.count -gt 2) { $Otch = $FIO[2].Substring(0,1) } else { $Otch = " "} # Создаем УЗ пользователя $NewUser = $False $UserDN = "CN="+$User.FIO+","+$UsersOU $Res = "" Switch ($MODE) { 1 { # WIN try { # New User Create new-aduser -Path $UsersOU -Name $User.FIO -GivenName $FIO[1] -Surname $FIO[0] -SamAccountName $User.Account -Company $User.Company -UserPrincipalName $UPN -EmailAddress $User.Email -Initials $Otch -DisplayName $User.FIO -AccountPassword (ConvertTo-SecureString $User.Pass -AsPlainText -Force) -Enabled $True $User.Account+$tab+"учетная запись создана" #>> $Log $Res = "Test" $NewUser = $True } catch [Microsoft.ActiveDirectory.Management.ADPasswordComplexityException] { $User.Account+$tab+"учетная запись создана, но отключена: "+$Error[0].exception.message >> $Log $NewUser = $True } catch { $ErMess = $Error[0].exception.message $User.Account+$tab+"учетная запись не создана:"+$tab+$Error[0].exception.message >> $Log } } 2 { # ELLES $Res = & dsadd user $UserDN -samid $User.Account -pwd $User.Pass -fn $FIO[1] -ln $FIO[0] -mi $Otch -company $User.Company -display $User.FIO -mustchpwd no -upn $UPN -email $User.Email -s $ServAddr -u $Admacc -p $AdmPass if ($Res.Length -gt 0) { $User.Account+$tab+"учетная запись создана" >> $Log $NewUser = $True } else { $Res = & dsquery user $UserDN -disabled -s $ServAddr -u $Admacc -p $AdmPass if ($Res.length -gt 0) { $User.Account+$tab+"учетная запись создана, но отключена: "+$Error[0].exception.message >> $Log $NewUser = $True } else {$User.Account+$tab+"!>учетная запись не создана:"+$tab+$Error[0].exception.message >> $Log} } } } # end Switch # Проверяем наличие в домене группы, в которую должен быть включен пользователь if ($NewUser -ne $True) {Continue GetByString} $TestGroup = $null Switch ($MODE) { 1 { # WIN try { $TestGroup = Get-ADGroup -Identity $User.Group -ErrorAction SilentlyContinue } catch {} } 2 { # ELLES $GroupExist = & dsquery group domainroot -name $User.Group -s $ServAddr -u $Admacc -p $AdmPass if ($GroupExist.length -gt 0) { $TestGroup = $GroupExist } } } # end Switch if ($TestGroup -eq $null) # если группы нет, - пробуем создать { Switch ($MODE) { 1 { # WIN try { New-ADGroup -Path $GroupsOU -Name $User.Group -GroupCategory Security -GroupScope Global -DisplayName $User.Group $GroupsOU +$tab+$User.Group } catch { $User.Account+$tab+"учетная запись не добавлена в группу"+$tab+$User.Group+$tab+"поскольку группа с таким именем не найдена, при попытке создать - ошибка: "+$Error[0].exception.message >> $Log $Error[0].exception.message Continue GetByString } } 2 { # ELLES $NewGroupDN = "CN="+$User.Group+","+$GroupsOU $ResAddGroup = & dsadd group $NewGroupDN -s $ServAddr -u $Admacc -p $AdmPass if ($ResAddGroup.length -eq 0) { $User.Account+$tab+"!> не удалось создать группу"+$tab+$User.Group+$tab+", - ошибка: "+$Error[0].exception.message >> $Log Continue GetByString } } } # end Switch } # Включаем пользователя в группу Switch ($MODE) { 1 { # WIN try { Add-ADGroupMember -Identity $User.Group -Members $User.Account $User.Account+$tab+"учетная запись добавлена в группу "+$User.Group >> $Log } catch { $User.Account+$tab+"учетная запись не добавлена в группу+$tab+ "+$User.Group+$tab+", ошибка: "+$Error[0].exception.message >> $Log } } 2 { # ELLES $ResGroupMod = & dsmod group $NewGroupDN -addmbr $UserDN -s $ServAddr -u $Admacc -p $AdmPass if ($ResGroupMod.length -gt 0) { $User.Account+$tab+"учетная запись добавлена в группу"+$tab+$User.Group >> $Log } else { $User.Account+$tab+"Error when add to group"+$tab+$Error[0].exception.message >> $Log } } } # end Switch } -
скачайте вариант скрипта, предназначенный для запуска в командной строке PowerShell, и вызовите его в следующем формате:
.\add_users_from_file_demo.ps1 -MODE {1|2} -ServAddr <DC IP | DC FQDN> -Admacc <AdminAcc> -AdmPass <AdminPassword> -UsersFile <FilePath> -HQ <OU>Входные параметры (если не указано иное, перечисленные параметры являются обязательными):
-
-MODE— режим работы скрипта:-
1— использование командлетов PowerShell для добавления пользователей на контроллере домена под управлением ОС Windows Server; -
2— использование утилит командной строки RSAT для добавления пользователей на контроллере домена Эллес или под управлением ОС Windows Server;
-
-
-ServAddr— IP-адрес или полное доменное имя (FQDN) сервера контроллера домена; -
-Admacc— имя пользователя с правами администратора домена; -
-AdmPass— пароль пользователя с правами администратора домена; -
-HeadLine(необязательный) — признак наличия в файле строки заголовка:-
$trueили1— в файле присутствует строка заголовка, которую требуется игнорировать; -
$falseили0(по умолчанию) — в файле отсутствует строка заголовка.
-
Например:
.\add_users_from_file_demo.ps1 -MODE 2 -ServAddr 172.19.172.147 -Admacc ROOT\Administrator -AdmPass P@ssw0rd -UsersFile c:\Temp\users.txt -HQ INNOTECH
-
Убедитесь, что группы и пользователи созданы корректно.
-
проверьте содержимое файла отчета AddUsers.log в том же каталоге, где находится файл с данными пользователей; в случае успешного завершения работы скрипта файл должен содержать следующие строки:
7.8.2024.01.41 IvanovII учетная запись создана IvanovII учетная запись добавлена в группу INNO-Sputnik-Russia-Users-SRC AkhmedovaDR учетная запись создана AkhmedovaDR учетная запись добавлена в группу INNO-Sputnik-Uzbekistan-Users-SRC RomanovRR учетная запись создана RomanovRR учетная запись добавлена в группу INNO-Sputnik-Belarus-Users-SRC
-
проверьте состав групп и пользователей на участнике домена с ОС Windows Server или ОС Windows:
PS C:\Users\Administrator> dsquery * ou=groups,ou=innotech1,dc=domain,dc=name -limit 0 -scope onelevel -s 172.19.172.147 -u Administrator -p P@ssw0rd "CN=INNO-Sputnik-Belarus-Users-SRC,OU=Groups,OU=INNOTECH1,DC=testl,DC=lan" "CN=INNO-Sputnik-Uzbekistan-Users-SRC,OU=Groups,OU=INNOTECH1,DC=testl,DC=lan" "CN=INNO-Sputnik-Russia-Users-SRC,OU=Groups,OU=INNOTECH1,DC=testl,DC=lan" PS C:\Users\Administrator> dsquery * ou=users,ou=innotech1,dc=domain,dc=name -limit 0 -scope onelevel -s 172.19.172.147 -u Administrator -p P@ssw0rd "CN=Роман Романович Романов,OU=Users,OU=INNOTECH1,DC=testl,DC=lan" "CN=Ахмедова Диана Расуловна,OU=Users,OU=INNOTECH1,DC=testl,DC=lan" "CN=Иван Иванович Иванов,OU=Users,OU=INNOTECH1,DC=testl,DC=lan"
-
проверьте состав групп и пользователей на контроллере домена Эллес:
samba-tool ou listobjects 'OU=Groups,OU=INNOTECH' -H ldap://elles-dc.domain.name --use-kerberos-required CN=INNO-Sputnik-Belarus-Users-SRC,OU=Groups,OU=INNOTECH CN=INNO-Sputnik-Uzbekistan-Users-SRC,OU=Groups,OU=INNOTECH CN=INNO-Sputnik-Russia-Users-SRC,OU=Groups,OU=INNOTECHs samba-tool ou listobjects 'OU=Users,OU=INNOTECH' -H ldap://elles-dc.domain.name --use-kerberos-required CN=Роман Романович Романов,OU=Users,OU=INNOTECH CN=Ахмедова Диана Расуловна,OU=Users,OU=INNOTECH CN=Иван Иванович Иванов,OU=Users,OU=INNOTECH