Выгружаем пользователей AD в базу MS SQL

Здравствуйте!
Продолжаю публикации скриптов. Сегодняшний наш пациент был разработан в процессе создания биллинга звонков. У каждого юзера в Active Direcotry есть поле, в котором прописан его внутренний номер телефона. Этот же номер фигурирует в биллинге, но нам конечно хочется видеть не что-то вроде "1316", а "Иванов Владислав Александрович".
В сети полно примеров и скриптов, позволяющих достать пользователей из AD в csv-файл. По логике, мы можем потом взять этот csv и импортировать в MS SQL с помощью SSIS-скриптов. Однако это мне это не понравилось, т.к. на выходе у нас получается аж два скрипта, работающих на разных технологиях + один промежуточный файл. И это только для одного домена AD. А у меня их 14.
Исходя из вышесказанного, было принято решение сделать все одним скриптом на любимом Powershell. Так сказать, одним махом всех побивахом.
Для работы скрипта необходим пакет для Powershell Quest-что-то-там... не помню уже дословно ... файл с дистрибутивом называется "Quest_ActiveRolesManagementShellforActiveDirectoryx64_151.msi". Думаю, вы найдете все в Гугле.
Add-PSSnapin Quest.ActiveRoles.ADManagement if (!$args[0]) { Write-Host "Не определена переменная!" } else { $domain = $args[0] + ".domain.local"; $users = Get-QADUser -Enabled -ou "$domain/" -Service "$domain" | Select-Object telephoneNumber, mail, mobile, email, logonname, description, displayname, UserPrincipalName; $conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=<sql-сервер>; Initial Catalog=test; Integrated Security=SSPI"); $conn.open(); foreach ($item in $users) { $cmd = $conn.createcommand(); $cmd.commandtext = "INSERT users (telephoneNumber, mail, mobile, email, logonname, description, displayname, UserPrincipalName) VALUES ('$($item.telephoneNumber)', '$($item.mail)', '$($item.mobile)', '$($item.email)', '$($item.logonname)', '$($item.description)', '$($item.displayname)', '$($item.UserPrincipalName)')"; #try { $cmd.executenonquery(); #} #catch [system.exception] { # "caught a system exception" #} } $conn.close(); }
Надеюсь, ничего сложного:). Скрипт принимает аргумент - NETBIOS-имя домена.
На всякий случай - внизу за комментарием скрыта конструкция обработки ошибок.
active directory (ru), powershell (ru), скрипт, ms sql server (ru)
- Просмотров: 4407