Создание отчетов об OU Active Directory с помощью PowerShell

Создание отчетов об организационных единицах Active Directory с помощью PowerShell. Организационная единица (OU) – это контейнер Active Directory (AD), в котором могут храниться пользователи, группы, компьютеры и другие ОУ. У каждого домена AD может быть своя иерархия организационных единиц. В этой статье будет рассмотрено управление OU и способы использования сценариев PowerShell в Windows для перемещения, создания, удаления и создания отчетов об ОУ в AD, а также привязка и применение политики групп к ОУ.

Создание отчетов об организационных единицах Active Directory с помощью Powershell

Предварительные требованияЕсли мы хотим следовать примерам сценариев в этой статье, нам нужно установить необходимые компоненты:

Если мы хотим следовать приведенным примерам скриптов в этой статье, нам нужно установить предварительно требуемые компоненты:

Ну что ж, как создать отчеты о единицах организации 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.

Объекты из других доменов не могут быть включены в организационные единицы Active Directory. В следующих разделах будут рассмотрены основные команды для управления ОУ.

Создание ОУ в 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
}

Удалить 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 удалит дочерние объекты, даже если защита от удаления включена для них.

Управление организационными единицами в AD

Теперь, когда мы обсудили основные команды и параметры, связанные с организационными единицами, мы рассмотрим, как можно создавать отчеты об ОУ с помощью PowerShell.

Получение списка всех ОУ с помощью PowerShell

Мы будем использовать командлет Get-ADOrganizationalUnit . Во-первых, отсортируйте по CanonicalName. Эта команда отображает структуру ОУ, которая легче для чтения.

Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
Format-Table CanonicalName, DistinguishedName

Вот пример вывода в PowerShell, когда мы запускаем команду:

Вывод со всеми ОУ в AD является отличным списком. Но как мы узнаем, содержит ли ОУ какие-либо пользователи?

Получить список всех 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 содержится объект компьютера, оно не будет отображаться. Эта команда проверит и отобразит только количество пользователей.

Экспорт 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. Мы заключим сейчас.

Заключение Создание отчетов об организационных единицах Active Directory с помощью PowerShell

Теперь, когда мы узнали, как управлять ОЕ в Active Directory с помощью сценариев PowerShell, мы можем автоматизировать различные операции, связанные с управлением ОЕ и соответствующим образом генерировать отчеты. Пожалуйста, перед тем, как мы попробуем эти команды, включите функцию “Корзина Active Directory” для легкого отката любых ошибочных удалений. Также разумно внимательно отслеживать все изменения в вашей структуре организации.

Обязательно ознакомьтесь с нашим содержимым PowerShell на нашем блоге здесь.

Source:
https://infrasos.com/create-active-directory-ou-reports-with-powershell/