Выгрузка членов групп (более 1500)/ export members tools

Ответить
Аватара пользователя
Дмитрий И.А.
Сообщения: 3
Зарегистрирован: 10 ноя 2017 02:46
Контактная информация:

Выгрузка членов групп (более 1500)/ export members tools

Сообщение Дмитрий И.А. »

Инструмент имеет простенький интерфейс и уже готов к работе без доп. модулей для PS
Сохраните скрипт ( [любое имя].ps1 ) в директорию доступную для записи и выгружайте на здоровье. :)

Поиск групп осуществляется по началу имени группы, если потребуется выгрузить членов по нескольким группам, просто укажите начало имени групп и скрипт найдет все. После чего выгрузит по каждой группе в отдельную [имя группы].csv в директории скрипта.

ЗЫ. Для ускорения поиска групп можно указать OU в которой будет выполнятся поиск в переменной LDAP_DIR в самом начале в в виде LDAP пути (пример: "LDAP://OU=[my OU],DC=[my DC]" ).

$LDAP_DIR = ""

###Функция для получения членов групп более 1500
function Get_MemGr {
$AdsPath = [string]$Args
$range = -1
$GroupMember =$Null
Do {
$range += 15
$Filter = "(objectClass=*)"
$Properties = "member;range=" + ($range - 14) + "-" + $range
$Searcher = New-Object DirectoryServices.DirectorySearcher($AdsPath, $Filter, $Properties, "Base")
$Group = $Null
$Group = $Searcher.FindOne().Properties
[string]$NameVal = ($Group.PropertyNames -match "member")
if ( $Group -ne $null){$GroupMember += $Group.$NameVal}
} While ( $Group -ne $null )
return $GroupMember
}
###


########

For($Flag_end -eq 'end'){
Clear-Host
Write-Host "Добро пожаловать`nУтилита для выгрузки пользователей и из группы`nГотова к работе" -ForegroundColor green
if ($LDAP_DIR -ne ""){Write-Host "Сканируемая директория:" ($LDAP_DIR -replace "LDAP://" -replace ",DC=.+$" -replace "^.+=")}ELSE{Write-Host "Сканируемая директория: Весь домен" }
Write-Host "Директория для выгрузки:" (%{(Get-Location).Path})
Write-Host "Введите имя группы или начало её имени" -ForegroundColor yellow
$PRX = Read-Host

#Выход если введена переменная выхода
if ($PRX -eq 'end' -or $PRX -eq '*' -or $PRX -eq " " -or $PRX -eq ""){exit}

###################################

$search = New-Object system.DirectoryServices.DirectorySearcher
if ($LDAP_DIR -ne ""){$search.SearchRoot = $LDAP_DIR}
$search.Filter = "(&(objectCategory=Group)(cn=$PRX*))"
$search.PageSize = 100000
$Group_list = $search.Findall() | %{$_.path}
if($Group_list.Count -ne 0){
$Count_members = 0

foreach($GRP in $Group_list){

$Members = $Null
$Name_Group = $GRP -replace 'LDAP://CN=' -replace '[(].+$' -replace ',OU.+$'
Write-Host "\\" $Name_Group
$PATH = ".\" + $Name_Group + ".csv"
$Members = Get_MemGr $GRP
$Count_members = $Members.count

For([INT]$IND=0;$IND -lt $Members.Count;$IND++){
$ADobj = 'LDAP://' + $Members[$IND]
$ADobj =[ADSI] $ADobj
[string]$Members[$IND] = $ADobj.name + ';' + $ADobj.sAMAccountName + ';' + $ADobj.mail + ';' + $ADobj.company + ';'+ $ADobj.department + ';' + $ADobj.title + ';' + $ADobj.l + ';' + $ADobj.streetAddress + ';' + $ADobj.physicalDeliveryOfficeName
$Count_members--
Write-Host $Count_members : $ADobj.name
}

Set-Content -Path $PATH -Value $Members
sleep 2
}

}

}
Ответить

Вернуться в «Powershell»