Для выгрузки в Powershell из AD две команды. Мы можем выгружать все что угодно, главное понять принцип. Например так я могу выгрузить всех пользователей AD в powershell:
Get-ADUser -Filter * | Export-Csv -Path C:\ad.csv
Где:
- Filter - со знаком * говорит, что мы получаем всех пользователей
- Path - путь, где создаться файл с данными
Данные будут выглядеть так:
У Export-CSV есть дополнительные ключи, которые могут понадобиться. Это:
- Encoding - по умолчанию стоит кодировка UTF8NoBOM, если мы хотим использовать Unicode или UTF8 то просто впишите их после ключа так же как написал я.
- Delimetr - делиметр или разделитель CSV файла может быть разный. По умолчанию он берется из настроек системы. Если локализация ОС с AD английская, а файл будет читаться на русской, то нужно после ключа вписать ";" или "," (в зависимости от того, что понадобится)
- NoTypeInformation - не будет включать техническую информацию командлета.
Более подробно команды рассмотрим далее.
Фильтры для выгрузки из AD пользователей в Powershell
При выполнении предыдущей команды мы экспортировали только свойства, которые выводятся при ее обычном выполнении. Мы не выгрузили свойства, например, LastLogon, почту или город. Для того что бы увидеть все свойства, которые хранит объект (команда) нужно сделать следующее:
Get-ADUser -Filter * -Properties * | Get-Member -MemberType Property
Большинство того, что в колонке MemberType - это свойства, которые мы можем добавлять для вывода.
Если вам не важно то, что у вас будет куча столбцов, то выгрузить все можно так:
Get-ADUser -Filter * -Properties * | Export-Csv -Path "C:\ad.csv" -NoTypeInformation -Delimiter ","
В моем случае в качестве разделителя CSV я установил запятую и исключил техническую информацию о командлете экспорта.
Если я хочу экспортировать только конкретные свойства или исключить другие, например SID и GUID, то нужно делать так:
#Получаем всех пользователей и добавляем свойства Name и Lastlogon
$all_users = Get-ADUser -Filter * -Properties Name,LastLogon
#Во всех предыдущих данных мы убираем SID и GUID, а все остальные добавляем для экспорта
$filter_property = $all_users | SELECT -ExcludeProperty SID,ObjectGUID -Property *
#Экспортируем
$filter_property | Export-CSV -Path C:\ad.txt
Мы можем фильтровать данные и по их свойству. Т.е. можно получить пользователей конкретно по фамилии, только отключенных или созданных до определенной даты и т.д.. Так я получу объекты, имя которых содержит строку test:
Get-ADUser -Filter {Name -Like "*Test*"}
А это пример посложнее. Тут я нашел все объекты, которые включены и созданны за последние 15 дней:
$date = (Get-Date).AddDays(-15)
$data = Get-ADUser -Filter {(Enabled -eq $True) -and (createTimeStamp -gt $date)}
$data | Export-CSV -Path C:\Data.txt
Если интересно, то тут примеры как работать с Get-Date. Ключ eq ищет точное сравнение, а gt значит больше чем.
Выгрузка пользователей из OU в Powershell
Для выгрузки пользователей из OU в Powershell есть дополнительный ключ SearchBase. Для примера я ищу пользователей в организационной единице Moscow, домене domain.local:
Get-AdUser -Filter * -SearchBase "OU=Moscow,DC=domain,DC=local" | Export-Csv -Path C:\Data.csv
Если одна организационная единица вложенная в другую, то можно добавить в строку запись об этом. В моем случае маркетинг находится в Москве и это будет выглядеть так:
"OU=Marketing,OU=Moscow,DC=domain,DC=local"
Если мы получаем данные из нескольких организационных единиц, то их нужно объявить в переменную и передать в цикл т.к. встроенного метода для таких операций нет:
#Объявляем все организационные единицы через запятую
$oui = "OU=Moscow,DC=domain,DC=local","OU=Baku,DC=domain,DC=local"
#Получаем объекты для каждого значения переменной
$result = $oui | foreach {Get-ADUser -Filter * -SearchBase $_ }
#Сохраняем в файл
$result | Export-Csv -Path C:\data.txt
Если нужно исключить какую-то OU для выгрузки через Powershell это примерно так:
Get-AdUser -Filter * -SearchBase "OU=Moscow,DC=domain,DC=local" | Where-Object -Property DistinguishedName -NotLike "*OU=IT*"
Выгрузка пользователей группы AD в Powershell
Для получения всех групп есть похожий командлет Get-ADGroup. Так мы получим все группы со всеми свойствами:
Get-ADGroup -Filter * -Properties *
Примеры работы с Filter и Properies я приводил выше, поэтому обсуждать их не буду. Командлет может возвращать пользователей, но мне удобнее использовать Get-ADGroupMember т.к. он возвращает конкретно участников группы:
Get-ADGroup -Filter {GroupCategory -eq "Security"} | Get-ADGroupMember | Export-CSV C:\group.txt
Так я получу всех участников групп безопасности. Не обязательно использовать их совместно. Мы можем использовать имя группы как идентификатор:
Get-ADGroupMember -Identity Administrators | Export-CSV -Path C:\theend.txt
...
Подписывайтесь на наш Telegram канал
Теги: #powershell #ad