Powershell: Massenimport von Active Directory Benutzern aus einer SQL-Server Tabelle
In dem folgenden Beispiel wird gezeigt, wie man mit einem Powershell Script Benutzer im Active Directory anlegt, deren Namen in einer SQL-Datenbank gespeichert sind.
Das Ergebnis des Massenimports wird anschließend per Mail verschickt.
Dieses Script könnte zum Beispiel einmal pro Nacht neue AD-Konten aus einer HR-Datenbank anlegen.
Ich habe dieses Script bewusst einfach gehalten, um die Funktionen deutlicher erkennbar zu machen.
Voraussetzungen für die Ausführung sind
- Powershell ab Version 2.0 (es werden keine ‚Spezial-Module‘ verwendet)
- Zugriff auf die Datenbank
- Rechte zum Anlegen eines User-Objekts im angegeben Benutzer-Container
Script: Bulk-Import von AD Usern aus SQL Server Tabelle
$mail = user@domain.com <# Sender- und Empfänger-Mailbox für Import-Ergebnis #>
$smtpServer = „servername“ <# SNMP-Server (muss angepasst werden)#>
$con = „Data Source=localhost\SQLEXPRESS;Initial Catalog=UserDB;Integrated Security=True“ <# SQL-Verbindungszeichenfolge#>
<# Der Active-Direcory Container unter dem die neuen Konten angelegt werden #>
$containerDN = „LDAP://OU=Users,OU=DEN01,OU=US,DC=domain,DC=net“
<# Die SQL-Abfrage gegen die Datenbank… #>
$query = „SELECT LogonName FROM LogonNames WHERE … „
$adapter = new-object system.data.sqlclient.sqlDataAdapter($query,$con)
$table = new-object System.data.dataTable
$adapter.Fill($table) <# Hier wird die eigentliche Abfrage durchgeführt… #>
<# Referenz auf den AD-Benutzer-Container erstellen… #>
$userContainer = New-Object System.DirectoryServices.DirectoryEntry($containerDN)
del $logFile -ErrorAction Ignore <# Löschen des Logfiles #>
<# Für alle Zeilen der Ergebnistabelle ausführen… #>
foreach($row in $table.Rows)
{
$logonName = $row[„LogonName“]
<# Wert für Benutzername aus Tabellenspalte „LogonName“ auslesen… #>
try
{
<# Erstellen des AD-Benutzerkontos #>
$newUser = $userContainer.Children.Add(„cn=$logonName„,“User“)
$newUser.Properties[„samAccountName“].Value=$logonName
$newUser.CommitChanges()
$newUser.Path >> $logFile <#AD-Pfad des neuen Kontos in Logdatei #>
}
catch [Exception]
{
<# Fehlerbehandlung #>
„Error creating user $logonName“ >> $logFile
$_ >> $logFile
}
}
<# Versenden des Logfiles an eine Mailbox #>
Send-MailMessage -SmtpServer $smtpServer -From $mail -To $mail -Subject User-Import -Attachments $logFile
Erweiterungsmöglichkeiten:
In diesem Beispiel wird der Benutzer nur mit den notwendigsten Attributen „samAccountName“ und „cn“ angelegt. Das Ergebnis ist ein deaktiviertes Benutzerkonto ohne Kennwort.
Wenn weiter Eigenschaften aus der Datenbank genutzt werden sollen, sind folgende Änderungen notwendig:
$query = „select LogonName, Attribute1 from LogonNames“
Hinter der Zeile:
$newUser.Properties[„samAccountName“].Value=$logonName
Muss eine neue Zeile eingefügt werden:
$newUser.Properties[„ldapAttribute1“].Value=$row[„Attribute1“]
Hinweis:
Es werden schreibende Zugriffe auf das Active Directory ausgeführt!
Das Script sollte vor dem Produktiveinsatz sorgfältig getestet werden.
Der Autor übernimmt keinerlei Haftung für Datenverlust, unerwünschte Nebeneffekte oder sonstige Garantien. Das Risiko aus der Verwendung oder Leistung des Scripts trägt der Anwender.
- Powershell AD SQL Mail
Leave a Reply
<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>