Создание отчетов об организационных единицах Active Directory с помощью PowerShell. Организационная единица (OU) – это контейнер Active Directory (AD), в котором могут храниться пользователи, группы, компьютеры и другие ОУ. У каждого домена AD может быть своя иерархия организационных единиц. В этой статье будет рассмотрено управление OU и способы использования сценариев PowerShell в Windows для перемещения, создания, удаления и создания отчетов об ОУ в AD, а также привязка и применение политики групп к ОУ.
Создание отчетов об организационных единицах Active Directory с помощью Powershell
Предварительные требования Если мы хотим следовать примерам сценариев в этой статье, нам нужно установить необходимые компоненты:
Если мы хотим следовать приведенным примерам скриптов в этой статье, нам нужно установить предварительно требуемые компоненты:
-
Уровень функциональности домена
–
Windows
Server 2016. -
Удаленные серверные административные инструменты (RSAT) для Active Directory
установлены на вашем рабочем месте, присоединенном к домену. -
Последняя версия PowerShell, или хотя бы
PowerShell 5.x
и выше, необходимы для выполнения скриптов.
Ну что ж, как создать отчеты о единицах организации Active Directory с помощью PowerShell? Давайте узнаем.
Понимание команд для организационных единиц
A Microsoft Active Directory domain container that can hold users, groups, and computers is an organizational unit (OU). It is the smallest unit to which a Windows system administrator can assign a Group Policy setting or account permission. An organizational unit may contain multiple OUs, but each attribute within the containing OU must be distinct.
Также читайте Развертывание инструмента мониторинга Azure AD
Создание ОУ в Active Directory с помощью PowerShell
Мы можем создать новый организационный объект в AD с помощью командлета New-ADOrganizationalUnit и указать имя нового объекта OU. Windows PowerShell по умолчанию создаст Организационную Единицу в корне домена. Например, следующая команда создаст OU с именем IT на контроллере домена (DC):
New-ADOrganizationalUnit “IT”
Если нам нужен другой LDAP-путь OU, используйте параметр командлета -Path для указания его уникального имени (DN):
New-ADOrganizationalUnit “IT” –Path “OU=Users,DC=InfraSOS,DC=com”
Перемещение OU в Active Directory с помощью PowerShell
Если нам нужно переместить OU в другое место, используйте Move-ADObject cmdlet. Важно отметить, что мы не должны защищать целевой OU от случайной удаления. Если это так, используйте следующую команду для снятия защиты:
Set-ADOrganizationalUnit -Identity "OU=IT,OU=Users,DC=InfraSOS,DC=Com" -ProtectedFromAccidentalDeletion $False
Теперь мы можем переместить OU в другое место:
Move-ADObject -Identity "OU=Regions,OU=Managers,DC=InfraSOS,DC=Com" -TargetPath "OU=IT,DC=InfraSOS,DC=Com"
Переименование OU в Active Directory с помощью PowerShell
Используйте Rename-ADObject cmdlet для переименования организационной единицы. Параметр Identity указывает на переименовываемый объект AD и требует либо DN, либо GUID. Например, эта команда меняет имя OU IT на Маркетинг:
Rename-ADObject -Identity "OU=Regions,OU=IT,DC=InfraSOS,DC=COM" -NewName Marketing
Мы также можем использовать Get-ADOrganizationalUnit cmdlet с параметром -Filter , который не требует полного LDAP-пути к OU. Однако этот cmdlet будет искать во всем AD, и скрипт применит действие команды ко всем Организационным Единицам с термином поиска в их именах:
Get-ADOrganizationalUnit -Filter "Name -eq 'Zones'" | Rename-ADObject -NewName Area
Мы обсудим больше команд Get OU, когда начнем создавать отчеты.
Применение политики группы к OU в Active Directory с помощью PowerShell
Чтобы назначить Политику группы для Организационного объекта, мы можем использовать команду New-GPLink, которая связывает указанный объект Политики группы (GPO) и Организационный объект. Кроме того, мы можем определить любую из следующих свойств для ссылки:
- Включено – Если ссылка имеет включенный статус, настройки GPO обрабатываются при применении Политики группы для сайта, домена и OU.
- Принудительно – Если ссылка имеет принудительный статус, мы не можем заблокировать OU в контейнере более низкого уровня.
- Порядок – Порядок статус указывает приоритет настроек GPO.
Например, следующая команда связывает GPO Block с IT Организационным Узлом с включенной и настроенной связью:
New-GPLink -Name "Block" -Target "OU=Districts,OU=IT, DC=InfraSOS, DC=com" -LinkEnabled Yes -Enforced Yes
Перемещение пользователей и компьютеров в новый OU в AD с помощью PowerShell
После того, как мы создали Организационный Узел и, если необходимо, связали его с GPO, мы заполним его пользователями и компьютерами. Move-ADObject команда в PowerShell перемещает любой объект или набор объектов активного каталога в другой OU. Параметр –Identity указывает, какой объект должен быть перемещен в Active Directory объект или контейнер.
Очень важно отметить, что мы должны указать полный путь объекта LDAP или SID; мы не можем использовать его SamAccountName. В следующем примере показано, как переместить пользователя в OU IT:
Move-ADObject -Identity "CN=marion,CN=Users,DC=InfraSOS,DC=com" -TargetPath "OU=IT,OU=Users,DC=InfraSOS,DC=com"
Используйте точно такую же синтаксис для перемещения компьютерных объектов. Например, следующая команда переместит компьютер DESKTOP-01 в контейнер Компьютеры:
Move-ADObject -Identity "CN=DESKTOP-01,OU=Computers,DC=InfraSOS,DC=com" -TargetPath "CN=Workstations,DC=InfraSOS,DC=com"
Массовое перемещение компьютеров и пользователей AD в другую OU
Если у нас есть предварительно составленный список объектов для перемещения, мы можем сохранить его в виде текстового файла, а затем импортировать в Active Directory. Подготовьте свой список, добавив один объект AD на каждой строке. Текстовый файл, содержащий список, должен выглядеть примерно так:

Используйте этот скрипт PowerShell для перемещения учетных записей пользователей AD, перечисленных в текстовом файле:
$destOU = "OU=Users,OU=IT,DC=InfraSOS,DC=com"
$usersList = Get-Content -Path "C:\temp\users.txt"
$usersList | ForEach-Object {
$userName = (Get-ADUser -Identity $_.Name).distinguishedName
Move-ADObject -Identity $userName -TargetPath $destOU
}
Чтобы переместить учетные записи компьютеров AD, перечисленные в текстовом файле, используйте следующий скрипт PowerShell:
$computers = Get-Content -Path "C:\Temp\Computers.txt"
$destOU = "OU=Computers,OU=IT,DC=InfraSOS,DC=com"
ForEach( $computer in $computers){
Get-ADComputer $computer |
Move-ADObject -TargetPath $destOU
}
Также читайте Посмотрите отчеты о группах Active Directory
Удалить OU из Active Directory с помощью PowerShell
The Remove-ADOrganizationalUnit команда удаляет OU. Однако мы не должны защищать OU от случайного удаления. Используя Get-ADOrganizationalUnit и Set-ADOrganizationalUnit командлеты, мы можем удалить опцию непреднамеренного удаления для каждого OU, в имени которого есть слово Zones:
Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $False
Используйте следующую команду, чтобы удалить из AD каждый OU, который содержит Zones в своем имени:
Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Remove-ADOrganizationalUnit –Recursive
Система попросит нас подтвердить удаление:
Обратите внимание, что -Recursive параметр удаляет как OU, так и все его дочерние объекты. AD удалит дочерние объекты, даже если защита от удаления включена для них.
Также читайте Использование инструмента отчетности Active Directory
Управление организационными единицами в AD
Теперь, когда мы обсудили основные команды и параметры, связанные с организационными единицами, мы рассмотрим, как можно создавать отчеты об ОУ с помощью PowerShell.
Получение списка всех ОУ с помощью PowerShell
Мы будем использовать командлет Get-ADOrganizationalUnit . Во-первых, отсортируйте по CanonicalName. Эта команда отображает структуру ОУ, которая легче для чтения.
Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
Format-Table CanonicalName, DistinguishedName
Вот пример вывода в PowerShell, когда мы запускаем команду:
Вывод со всеми ОУ в AD является отличным списком. Но как мы узнаем, содержит ли ОУ какие-либо пользователи?
Также читайте Просмотр отчетов о группах Active Directory
Получить список всех OU, включая количество пользователей, с помощью PowerShell
Мы предпочитаем использовать PowerShell для получения списка OU, включая количество пользователей. Эта команда сообщит нам, есть ли в OU какие-либо пользователи.
Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
ForEach-Object {
[pscustomobject]@{
Name = Split-Path $_.CanonicalName -Leaf
CanonicalName = $_.CanonicalName
UserCount = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
}
}
Она отобразит вывод с колонкой свойства UserCount. Если значение свойства UserCount равно нулю, то в OU нет пользователей. Если в OU содержится объект компьютера, оно не будет отображаться. Эта команда проверит и отобразит только количество пользователей.
Также читайте Развертывание отчетов о пользователях Office 365
Экспорт OU в AD в файл CSV с помощью PowerShell
Теперь, когда мы увидели список OU, мы хотим экспортировать его из AD. Таким образом, скрипт будет использовать PowerShell для получения организационных единиц и экспорта их в текстовый файл.
$results = Get-ADOrganizationalUnit -Properties CanonicalName -Filter * | Sort-Object CanonicalName |
ForEach-Object {
[pscustomobject]@{
Name = Split-Path $_.CanonicalName -Leaf
CanonicalName = $_.CanonicalName
UserCount = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
}
}
$results | Out-File C:\export_OUs.txt -Encoding UTF8
Если мы хотим экспортировать в CSV-файл, измените последнюю строку следующей командой:
$results | Export-Csv -Path C:\export_OUs.csv -NoTypeInformation -Encoding UTF8
Найдите экспортированный файл в указанном месте после выполнения вышеуказанной команды.
Спасибо за чтение Создание отчетов об организационных единицах Active Directory с помощью PowerShell. Мы заключим сейчас.
Также прочтите Проверьте инструмент управления Office 365
Заключение Создание отчетов об организационных единицах Active Directory с помощью PowerShell
Теперь, когда мы узнали, как управлять ОЕ в Active Directory с помощью сценариев PowerShell, мы можем автоматизировать различные операции, связанные с управлением ОЕ и соответствующим образом генерировать отчеты. Пожалуйста, перед тем, как мы попробуем эти команды, включите функцию “Корзина Active Directory” для легкого отката любых ошибочных удалений. Также разумно внимательно отслеживать все изменения в вашей структуре организации.
Обязательно ознакомьтесь с нашим содержимым PowerShell на нашем блоге здесь.
Source:
https://infrasos.com/create-active-directory-ou-reports-with-powershell/