Как в Powershell выгрузить из AD пользователей и группы CSV


27 июля 2019


Выгрузка в Poweshell AD пользователей и группы в CSV

Для выгрузки в Powershell из AD две команды. Мы можем выгружать все что угодно, главное понять принцип. Например так я могу выгрузить всех пользователей AD в powershell:

Get-ADUser -Filter * | Export-Csv -Path C:\ad.csv

Где:

  • Filter - со знаком * говорит, что мы получаем всех пользователей
  • Path - путь, где создаться файл с данными

Данные будут выглядеть так:

Powershell выгрузка из AD пользователей

У Export-CSV есть дополнительные ключи, которые могут понадобиться. Это:

  • Encoding - по умолчанию стоит кодировка UTF8NoBOM, если мы хотим использовать Unicode или UTF8 то просто впишите их после ключа так же как написал я.
  • Delimetr - делиметр или разделитель CSV файла может быть разный. По умолчанию он берется из настроек системы. Если локализация ОС с AD английская, а файл будет читаться на русской, то нужно после ключа вписать ";" или "," (в зависимости от того, что понадобится)
  • NoTypeInformation - не будет включать техническую информацию командлета.

Более подробно команды рассмотрим далее.

 

Фильтры для выгрузки из AD пользователей в Powershell

При выполнении предыдущей команды мы экспортировали только свойства, которые выводятся при ее обычном выполнении. Мы не выгрузили свойства, например, LastLogon, почту или город. Для того что бы увидеть все свойства, которые хранит объект (команда) нужно сделать следующее:

Get-ADUser -Filter * -Properties * | Get-Member -MemberType Property

Get-Aduser properties

Большинство того, что в колонке 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

Powershell выгрузка пользователей в CSV

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

Get-ADGroup -Filter {GroupCategory -eq "Security"} | Get-ADGroupMember | Export-CSV C:\group.txt

Так я получу всех участников групп безопасности. Не обязательно использовать их совместно. Мы можем использовать имя группы как идентификатор:

Get-ADGroupMember -Identity Administrators | Export-CSV -Path C:\theend.txt

 

...

Теги: #powershell #ad


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.