- Использование модуля Active Directory for PowerShell для администрирования домена
- Установка модуля Active Directory для PowerShell в Windows Server
- Установка модуля RSAT-AD-PowerShell в Windows 10
- Командлеты модуля AD для PowerShell
- Использование модуля RSAT-AD-PowerShell для администрирования AD
- New-ADUser: Создание пользователя в AD
- Get-ADComputer: Получить информацию о компьютерах домена
- Add-AdGroupMember: Добавить пользователя в группу AD
- Set-ADAccountPassword: Сброс пароля пользователя в AD
- Блокировка/разблокировка пользователя
- Search-ADAccount: Поиск неактивных компьютеров в домене
- New-ADOrganizationalUnit: Создать структуру OU в AD
- Get-ADReplicationFailure: Проверка репликации в AD
- Try to import module ActiveDirectory on a linux powershell
- 1 Answer 1
- 10 задач администрирования Active Directory, решаемых с помощью PowerShell
- Требования
- Задача 1: Сброс пароля пользователя
- Задача 2: Активировать и деактивировать учетные записи
- Задача 3: Разблокировать учетную запись пользователя
- Задача 4: Удалить учетную запись
- Задача 5: Поиск пустых групп
- Задача 6: Добавление пользователей в группу
- Задача 8: Найти устаревшие учетные записи компьютеров
- Задача 9: Деактивировать учетную запись компьютера
- Задача 10: Найти компьютеры по типу
Использование модуля Active Directory for PowerShell для администрирования домена
Модуль Active Directory для Windows PowerShell сегодня является одним из основных средств администрирования домена, управления объектами в Active Directory, получения различной информации о компьютерах, пользователях, группах. Любой системный администратор Windows должен уметь пользоваться не только графическими оснастками AD (чаще всего это ADUC – Active Directory Users & Computer), но и командлетами этого модуля PowerShell для выполнения повседневных задач администрирования Active Directory. В этой статье мы рассмотрим, как установить модуль RSAT-AD-PowerShell, его базовый функционал и популярные командлеты, которые должны быть полезными при управлении и работе с AD.
Установка модуля Active Directory для PowerShell в Windows Server
Модуль Active Directory для Windows PowerShell уже встроен в операционные системы Windows Server (начиная с Windows Server 2008 R2), но по умолчанию не активирован.
В Windows Server 2016 вы можете включить модуль AD для PoSh в Windows Server 2016 из панели управления Server Manager (Add Roles and Features -> Features -> Remote Server Administration tools -> Role Administration Tools -> AD DS and AD LDS Tools -> Active Directory module for Windows PowerShell).
Также вы можете установить модуль из командной строки с помощью PowerShell команды:
Install-WindowsFeature -Name «RSAT-AD-PowerShell» –IncludeAllSubFeature
Вы можете установить модуль RSAT-AD-PowerShell не только на контроллере домена. Подойдет любой рядовой сервер или даже рабочая станция. На контроллерах домена AD модуль устанавливается автоматически при развертывании роли ADDS (при повышении сервера до DC).
Взаимодействие модуля с AD выполняется через служба Active Directory Web Services, которая должна быть установлена на котроллере домена (взаимодействие по порту TCP 9389).
Установка модуля RSAT-AD-PowerShell в Windows 10
Вы можете установить модуль RSAT-AD-PowerShell не только на серверах, но и на рабочих станциях. Этот модуль входит в состав пакета RSAT (Remote Server Administration Tools), который можно скачать и установить вручную в Window 7, Windows 8.1. После установки RSAT модуль AD дл PowerShell ставится из панели управления (Control Panel -> Programs and Features -> Turn Windows features on or off -> Remote Server Administration Tools-> Role Administration Tools -> AD DS and AD LDS Tools).
В Windows 10 1809 и выше пакет RSAT уже встроен в дистрибутив (как Features on Demand), поэтому для установки модуля можно воспользоваться командой:
Add-WindowsCapability –online –Name “Rsat.ActiveDirectory.DS-LDS.Tools
Командлеты модуля AD для PowerShell
В модуле Active Directory для Windows PowerShell имеется большое командлетов для взаимодействия с AD. В каждой новой версии RSAT их количество увеличивается (в Windows Server 2016 доступно 147 командлетов для AD).
Перед использованием командлетов модуля, его нужно импортировать в сессию PowerShell (в Windows Server 2012 R2/ Windows 8.1 модуль импортируется автоматически):
$rs = New-PSSession -ComputerName DC_or_Comp_with_ADPosh
Import-Module -PSsession $rs -Name ActiveDirectory
Вы можете вывести полный список доступных командлетов с помощью команды:
Get-Command –module activedirectory
Общее количество команд в модуле:
Get-Command –module activedirectory |measure-object
Большинство командлетов модуля RSAT-AD-PowerShell начинаются с префикса Get-, Set-или New-.
- Командлеты класса Get- используются для получения различной информации из AD (Get-ADUser — свойства пользователей, Get-ADComputer – параметры компьютеров, Get-ADGroupMember — состав групп и т.д.). Для их выполнения не нужно быть администратором домена, любой пользователь домена может выполнять скрипты PowerShell для получения значений большинства атрибутов объектов AD (кроме защищенных, как в примере с LAPS).
- Командлеты класса Set- служат для изменения параметров объектов в AD, например, вы можете изменить свойства пользователя (Set-ADUser), компьютера (Set-ADComputer), добавить пользователя в группу и т.д. Для выполнения этих операций у вашей учетной записи должны быть права на объекты, которые вы хотите изменить (см. статью Делегирование прав администратора в AD).
- Команды, начинающиеся с New- позволяют создать объекты AD (создать пользователя — New-ADUser, группу — New-ADGroup).
- Командлеты Remove- служат для удаления объектов AD.
Получить справку о любом командлете можно так:
Примеры использования командлетов Active Directory можно вывести так:
В PowerShell ISE при наборе параметров командлетов модуля удобно использовать всплывающие подсказки.
Использование модуля RSAT-AD-PowerShell для администрирования AD
Рассмотрим несколько типовых задач администратора, которые можно выполнить с помощью команд модуля AD для PowerShell.
New-ADUser: Создание пользователя в AD
Для создания нового пользователя в AD можно использовать командлет New-ADUser. Создать пользователя можно командой:
New-ADUser -Name «Andrey Petrov» -GivenName «Andrey» -Surname «Petrov» -SamAccountName «apetrov» -UserPrincipalName «apetrov@winitpro.ru » -Path «OU=Users,OU=Ufa,DC=winitpro,DC=loc» -AccountPassword(Read-Host -AsSecureString «Input Password») -Enabled $true
Более подробно о команде New-ADUser (в том числе пример массового создания учетных записей в домене) читайте в статье .
Get-ADComputer: Получить информацию о компьютерах домена
Чтобы вывести информацию о компьютерах в определённом OU (имя компьютера и дата последней регистрации в сети) используйте командлет Get-ADComputer:
Get-ADComputer -SearchBase ‘OU=Russia,DC=winitpro,DC=ru’ -Filter * -Properties * | FT Name, LastLogonDate -Autosize
Add-AdGroupMember: Добавить пользователя в группу AD
Чтобы добавить пользователей в существующую группу безопасности в домене AD, выполните команду:
Add-AdGroupMember -Identity MskSales -Members apterov, divanov
Вывести список пользователей в группе AD и выгрузить его в файл:
Get-ADGroupMember MskSales -recursive| ft samaccountname| Out-File c:\script\export_users.csv
Set-ADAccountPassword: Сброс пароля пользователя в AD
Set-ADAccountPassword apterov -Reset -NewPassword (ConvertTo-SecureString -AsPlainText “P@ssw0rd1” -Force -Verbose) –PassThru
Блокировка/разблокировка пользователя
Отключить учетную запись:
Включить учетную запись:
Разблокировать аккаунт после блокировки парольной политикой:
Search-ADAccount: Поиск неактивных компьютеров в домене
Чтобы найти и заблокировать в домене все компьютеры, которые не регистрировались в сети более 100 дней, воспользуйтесь командлетом Search-ADAccount:
$timespan = New-Timespan –Days 100
Search-ADAccount -AccountInactive -ComputersOnly –TimeSpan $timespan | Disable-ADAccount
New-ADOrganizationalUnit: Создать структуру OU в AD
Чтобы быстро создать типовую структуры Organizational Unit в AD, можно воспользоваться скриптом PowerShell. Допустим, нам нужно создать несколько OU с городами, в которых создать типовые контейнеры. Вручную через графическую консоль ADUC такую структуру создавать довольно долго, а модуль AD для PowerShell позволяет решить такую задачу за несколько секунд (не считая время на написание скрипта):
$fqdn = Get-ADDomain
$fulldomain = $fqdn.DNSRoot
$domain = $fulldomain.split(«.»)
$Dom = $domain[0]
$Ext = $domain[1]
$Sites = («SPB»,»MSK»,»Sochi»)
$Services = («Users»,»Admins»,»Computers»,»Servers»,»Contacts»)
$FirstOU =»Russia»
New-ADOrganizationalUnit -Name $FirstOU -Description $FirstOU -Path «DC=$Dom,DC=$EXT» -ProtectedFromAccidentalDeletion $false
foreach ($S in $Sites)
<
New-ADOrganizationalUnit -Name $S -Description «$S» -Path «OU=$FirstOU,DC=$Dom,DC=$EXT» -ProtectedFromAccidentalDeletion $false
foreach ($Serv in $Services)
<
New-ADOrganizationalUnit -Name $Serv -Description «$S $Serv» -Path «OU=$S,OU=$FirstOU,DC=$Dom,DC=$EXT» -ProtectedFromAccidentalDeletion $false
>
>
После выполнения скрипта у нас в AD появилась такая структура OU.
Для переноса объектов между контейнерами AD можно использовать командлет Move-ADObject:
$TargetOU = «OU=Buhgalteriya,OU=Computers,DC=corp,DC=winitpro,DC=ru»
Get-ADComputer -Filter ‘Name -like «BuhPC*»‘ | Move-ADObject -TargetPath $TargetOU
Get-ADReplicationFailure: Проверка репликации в AD
С помощью командлета Get-ADReplicationFailure можно проверить состояние репликации между контроллерами домена AD:
Get-ADReplicationFailure -Target DC01,DC02
Получить информацию обо всех DC в домене с помощью командлета Get-AdDomainController:
Get-ADDomainController –filter * | select hostname,IPv4Address,IsGlobalCatalog,IsReadOnly,OperatingSystem | format-table –auto
Итак, в этой статье мы рассмотрели базовые возможности и особенности использования модуля AD для PowerShell для администрирования AD. Надеюсь, эта статья подтолкнет вас к дальнейшему исследованию возможностей этого модуля и автоматизации большинства задач управления AD.
Источник
Try to import module ActiveDirectory on a linux powershell
In my webpage I wanted to change the password of some accounts. So I got a script powershell. In this one I need to import the module Active-Directory to change the password of accounts. My server is on CentOS, so I install powershell on it. But when I do : Import-Module ActiveDirectory, the console return ‘Import-Module: The specified module ‘ActiveDirectory’ was not loaded because no valid module file was found in any module directory.’ Thanks
1 Answer 1
The short answer is. you can’t. The centos platform version of .net does not support the [System.DirectoryServices] types/classes yet, and I doubt they’ll be migrated over soon. Powershell’s ActiveDirectory module requires those to run, so this cannot currently be done in Powershell:
An alternative is using ldap commands from centos packages. Here’s some examples:
Changing a password for an AD user when you don’t know the current one is more complicated and requires a much more specific configuration on your machine, but can be done with just passwd if:
- your centos machine is joined to the domain correctly
- you are using an admin account with write permission to AD
- You have sssd configured with chpass_provider=ad in \etc\sssd\sssd.conf
Otherwise, the best option on linux is through python’s ldap module. I’m not as familiar with it, so I’m only linking working example code from a similar question: Modifying Active Directory Passwords via ldapmodify
Источник
10 задач администрирования Active Directory, решаемых с помощью PowerShell
Джеффери Хикс подготовил статью на Windows IT Pro, посвященную использования PowerShell для администрирования AD. В качестве исходного пункта автор решил взять 10 типичных задач администрирования AD и рассмотреть то, как их можно упростить, используя PowerShell:
- Сбросить пароль пользователя
- Активировать и деактивировать учетные записи
- Разблокировать учетную запись пользователя
- Удалить учетную запись
- Найти пустые группы
- Добавить пользователей в группу
- Вывести список членов группы
- Найти устаревшие учетные записи компьютеров
- Деактивировать учетную запись компьютера
- Найти компьютеры по типу
Помимо этого автор ведет блог (по PowerShell, конечно), рекомендуем заглянуть — jdhitsolutions.com/blog. А самое актуальное Вы можете получить из его твиттера twitter.com/jeffhicks.
Итак, ниже приводим перевод статьи “Top 10 Active Directory Tasks Solved with PowerShell”.
Управление Active Directory (AD) с помощью Windows PowerShell – это проще, чем Вы думаете, и я хочу доказать Вам это. Вы можете просто взять приведенные ниже скрипты и с их помощью решить ряд задач по управлению AD.
Требования
Чтобы использовать PowerShell для управления AD, нужно соблюсти несколько требований. Я собираюсь продемонстрировать, как командлеты для AD работают на примере компьютера на Windows 7.
Чтобы использовать командлеты, контроллер домена у Вас должен быть уровня Windows Server 2008 R2, или же Вы можете скачать и установить Active Directory Management Gateway Service на наследуемых контроллерах домена (legacy DCs). Внимательно прочитайте документацию перед установкой; требуется перезагрузка КД.
На стороне клиента, скачайте и установите Remote Server Administration Tools (RSAT) либо для Windows 7, либо для Windows 8. В Windows 7, Вам необходимо будет открыть в Панели управления (Control Panel) раздел Программы (Programs) и выбрать Включить или выключить функции Windows (Turn Windows Features On or Off). Найдите Remote Server Administration Tools и раскройте раздел Role Administration Tools. Выберите подходящие пункты для AD DS and AD LDS Tools, особенно обратите внимание на то, что должен быть выбран пункт Active Directory Module for Windows PowerShell, как показано на рисунке 1. (В Windows 8 все инструменты выбраны по умолчанию). Теперь мы готовы работать.
Рис.1 Включение AD DS и AD LDS Tools
Я вошел в систему под учетной записью с правами доменного администратора. Большинство командлетов, которые я буду показывать, позволят Вам уточнить альтернативные полномочия (credentials). В любом случае я рекомендую прочитать справку (Get-Help) и примеры, которые я буду демонстрировать ниже.
Начните сессию PowerShell и импортируйте модуль:
В результате импорта создается новый PSDrive, но мы не будем использовать его. Однако, Вы можете посмотреть, какие команды имеются в импортированном модуле.
Прелесть этих команд в том, что если я могу использовать команду для одного объекта AD, то ее можно использовать для 10, 100 и даже 1000. Посмотрим, как некоторые из этих командлетов работают.
Задача 1: Сброс пароля пользователя
Давайте начнем с типичной задачи: сброс пароля пользователя. Сделать это легко и просто можно через командлет Set-ADAccountPassword. Сложная часть заключается в том, что новый пароль должен быть уточнен как защищенная строка: фрагмент текста, который зашифрован и хранится в памяти на протяжении PowerShell сессии. Во-первых, создадим переменную с новым паролем:
Затем, введем новый пароль:
Теперь мы можем извлечь учетную запись (использование samAccountname – лучший вариант) и задать новый пароль. Вот пример для пользователя Jack Frost:
К сожалению, в случае с этим командлетом наблюдается баг: -Passthru, -Whatif, и –Confirm не работают. Если Вы предпочитаете короткий путь, попробуйте следующее:
В итоге мне необходимо, чтобы Jack сменил пароль при следующем входе в систему, и я модифицирую учетную запись используя Set-ADUser.
Результаты выполнения командлета не пишутся в консоль. Если это необходимо сделать, используйте –True. Но я могу узнать, успешно или нет прошла операция, произведя извлечения имени пользователя с помощью командлета Get-ADUser и уточнив свойство PasswordExpired, как показано на рисунке 2.
Рис. 2. Результаты работы командлета Get-ADUser Cmdlet со свойством PasswordExpired
Итог: сбросить пароль пользователя с помощью PowerShell совсем не сложно. Признаюсь, что сбросить пароль также просто через оснастку Active Directory Users and Computers консоли Microsoft Management Console (MMC). Но использование PowerShell подходит в том случае, если Вам необходимо делегировать задачу, Вы не хотите разворачивать вышеупомянутую оснастку или сбрасываете пароль в ходе большого автоматизированного ИТ-процесса.
Задача 2: Активировать и деактивировать учетные записи
А теперь давайте деактивируем учетную запись. Продолжим работать с Jack Frost. Этот код использует параметр –Whatif, который Вы можете встретить в других комадлетах, которые осуществляют изменения, чтобы проверить мою команду не запуская ее.
А теперь деактивируем по-настоящему:
А когда настанет время активировать учетную запись, какой командлет нам поможет?
Эти командлеты могут быть использованы в конвейерном выражении (pipelined expression), позволяя активировать или деактивировать столько учетных записей, сколько душе угодно. Например, этот код деактивирует все учетные записи в отделе продаж (Sales)
Конечно, писать фильтр для Get-ADUser довольно-таки сложно, но именно здесь использование параметра –Whatif вместе с командлетом Disable-ADAccount приходит на помощь.
Задача 3: Разблокировать учетную запись пользователя
Рассмотрим ситуацию, когда Jack заблокировал свою учетную запись, пытаясь ввести новый пароль. Вмест того, чтобы пытаться найти его учетную запись через GUI, процедуру разблокировки можно осуществить с помощью простой команды.
Командлет также поддерживает параметры -Whatif и -Confirm.
Задача 4: Удалить учетную запись
Неважно, сколько пользователей Вы удаляете, — это просто осуществить с помощью командлета Remove-ADUser. Мне не хочется удалять Jack Frost, но если бы я захотел, то использовал бы такой код:
Или я могу ввести несколько пользователей и удалить их с помощью одной простой команды:
С помощью этой команды будут найдены и удалены все деактивованные учетные записи подразделения (OU) Employees, которые не менялись в течение 180 и более дней.
Задача 5: Поиск пустых групп
Управление группами – занятие бесконечное и неблагодарное. Существует множество способов найти пустые группы. Некоторые выражения могут работать лучше, чем другие, в зависимости от Вашей организации. Код, приведенный ниже, позволит найти все группы в домене, включая встроенные (built-in).
Если у Вас есть группы с сотнями членов, тогда использование этой команды может занять много времени; Get-ADGroupMember проверяет каждую группу. Если Вы можете ограничить или настроить, это будет лучше.
Вот еще один подход:
Эта команда находит все универсальные группы (Universal groups), которые не имеют членство в OU Groups и выводит некоторые из свойств. Результат приведен на рисунке 3.
Рис. 3. Поиск и фильтрация универсальных групп
Задача 6: Добавление пользователей в группу
Давайте добавим Jack Frost в группу Chicago IT:
Да, все так просто. Вы можете также легко добавлять сотни пользователей в группы, хотя, на мой взгляд, это слегка неудобно:
Я использовал вводное конвейерное выражение (parenthetical pipelined expression), чтобы найти всех пользователей, у которых имеется свойство City в Chicago. Код в скобках выполняется, и полученные объекты передаются в параметр –Member. Каждый пользовательский объект добавляется в группу Chicago Employees. Неважно, имеем ли мы дело с 5 или 5000 пользователей, обновление членства в группах занимает всего несколько секунд. Это выражение может также быть написано с использованием ForEach-Object, что может быть удобнее:
Задача 7: Выводим список членов группы
Вы возможно захотите узнать, кто находится в определенной группе. Например, Вы должны периодически узнавать, кто входит в группу доменных администраторов (Domain Admins):
На рисунке 4 приведен результат.
Рис. 4. Члены группы Domain Admins
Командлет выводит объект AD для каждого члена группы. А что делать с вложенными группами? Моя группа Chicago All Users является коллекцией вложенных групп. Чтобы получить список всех учетных записей, я всего лишь должен использовать параметр –Recursive.
Если Вы хотите пойти другим путем – найти, в каких группах пользователь состоит, — используйте свойство пользователя MemberOf:
Я использовал параметр -ExpandProperty, чтобы вывести имена MemberOf как строки.
Задача 8: Найти устаревшие учетные записи компьютеров
Мне часто задают этот вопрос: “Как найти устаревшие учетные записи компьютеров?”. И я всегда отвечаю: “А что для вас является устаревшим?” Компании по-разному определяют то, когда учетная запись компьютера (или пользователя, неважно), признается устаревшей и не подлежит дальнейшему использованию. Что касается меня, то я обращаю внимание на те учетные записи, у которых пароли не менялись в течение определенного периода времени. Этот период для меня составляет 90 дней – если компьютер не сменил пароль вместе с доменом за этот период, скорее всего он находится оффлайн и является устаревшим. Используется командлет Get-ADComputer:
Фильтр замечательно работает с жестким значением, но этот код будет обновляться для всех учетных записей компьютеров, которые не изменили своих паролей с 1 января 2012 года. Результаты приведены на рисунке 5.
Рис. 5. Находим устаревшие учетные записи компьютеров
Другой вариант: предположим, вы хотя бы на функциональном уровне домена Windows 2003. Поставьте фильтр по свойству LastLogontimeStamp. Это значение – число 100 наносекундных интервалов с 1 января, 1601 года, и храниться в GMT, поэтому работа с этим значением слегка сложно:
Я взял на себя ответственность и добавил кастомное свойство, которое берет значение LastLogontimeStamp и конвертирует его в привычный формат. На рисунке 6 показан результат.
Рис. 6. Конвертируем значение LastLogonTimeStamp в привычный формат
Чтобы создать фильтр, мне необходимо конвертировать дату, например, 1 января 2012, в корректный формат. Конвертация осуществляется в FileTime:
Теперь я могу использовать эту переменную в фильтре для Get-ADComputer:
Приведённый код находит те же самые компьютеры, что были показаны на рисунке 5.
Задача 9: Деактивировать учетную запись компьютера
Возможно, когда Вы найдете неактивные или устаревшие учетные записи, Вы захотите деактировать их. Сделать это довольно просто. Мы будем использовать тот же командлет, что использовали в работе с учетными записями пользователей. Вы можете уточнить его, использовав samAccountname учетной записи.
Или же использовав конвейерное выражение:
Я также могу использовать мой код, чтобы найти устаревшие учетные записи и все их деактивировать:
Задача 10: Найти компьютеры по типу
Мне также часто задают вопрос, как найти учетные записи компьютеров по типу, например, серверы или рабочие станции. С вашей стороны это требует определенной креативности. В AD нет ничего такого, чтобы отличало сервер от клиента, разве что ОС. Если Ваш компьютер работает под Windows Server 2008, придется слегка сделать несколько дополнительных действий.
Для начала необходимо получить список ОС, а затем осуществляем фильтрацию учетных записей по имеющимся ОС.
Результаты показаны на рисунке 7.
Рис. 7. Извлечение списка ОС
Я хочу найти все компьютеры, на которых стоит серверная ОС:
Результаты приведены на рисунке 8.
Как и другими командлетами AD Get, Вы можете настроить поисковые параметры и ограничить запрос отдельными OU, если это необходимо. Все выражения, которые я показал, могут быть интегрированы в большие PowerShell выражения. Например, Вы можете сортировать, группировать, применять фильтры, экспортировать в CSV или создавать и отправлять на почту HTML отчеты – и все это из PowerShell! При этом Вам не придется писать ни единого скрипа.
Вот Вам бонус: отчет о возрасте пароля пользователя (user password-age report), сохраненный в HTML файле:
Хотя это выражение может выглядеть слегка пугающим, при минимальном знании PowerShell им легко воспользоваться. И остается лишь последний совет: как определить кастомное свойство под названием PasswordAge. Значение представляет собой промежуток между сегодняшним днем и свойством PasswordLastSet. Затем я сортирую результаты для моего нового свойства. На рисунке 9 показан выход для моего небольшого тестового домена.
А как вы используете PowerShell для того, чтобы упростить вашу работу?
Источник