Einen neuen Nutzer im Active Directory anzulegen ist schnell getan, doch das reicht meistens nicht aus. Der Mitarbeiter braucht auch noch Berechtigungen, Zugänge und ein Home Directory.
Wie man letzteres ganz einfach über PowerShell anlegen und dem Nutzer entsprechende Berechtigungen vergeben kann, möchte ich in diesem Beitrag kurz zeigen.
Ich möchte Ihnen Schritt für Schritt erklären, welche cmdlets ich in meinem Script benutze und welche Funktionen diese haben. Die Ungeduldigen unter Ihnen finden am Ende des Beitrags das komplette Script zum Kopieren.
Index
Home Directory anlegen
Beginnen wir mit dem Anlegen des Homeshares für einen neuen Nutzer. Dazu brauchen wir erst einmal drei Informationen in Form von Variablen, die wir unserem Script mitgeben müssen:
- Die Identität des Nutzers
- Der vollständige Pfad zu dem neuen Ordner
- Der Laufwerkbuchstabe, den der Nutzer im Explorer sehen soll
Die Identität des Nutzers mache ich in diesem Beispiel anhand des sAMAccountNames fest. Diesen übergebe ich in dem Script als Eingabeparameter. Den vollen Pfad baue ich aus dem Freigabepfad sowie dem sAMAccountName zusammen, den Laufwerkbuchstaben lege ich einfach fest. Sie können das natürlich Ihren Anforderungen entsprechend variieren:
Zuerst einmal möchte ich überprüfen, ob es einen Nutzer mit diesem sAMAccountName überhaupt in der Domäne gibt. Dazu führe ich einfach Get-AdUser aus und schaue, ob der zurückgegebene Wert gleich NULL ist. Die weitere Ausführung des Scripts macht natürlich nur Sinn, wenn dies nicht der Fall ist.
Innerhalb der If-Anweisung können wir also sicher sein, dass der Nutzer existiert und deswegen das Home Directory anlegen. Dies geschieht in zwei Schritten:
- Dem Nutzer ein Home-Verzeichnis und Laufwerksbuchstaben zuweisen
- Das entsprechende Verzeichnis für den Nutzer anlegen
Die Reihenfolge spielt dabei keine Rolle. Die Zuweisung von Laufwerksbuchstaben und Home-Verzeichnis geschieht einfach, indem ich die entsprechenden Attribute im Active Directory mit dem Set-AdUser cmdlet setze. Das eigentliche Verzeichnis lege ich anschließend mit New-Item an. Der Parameter -force sorgt dabei dafür, den Abfrage-Dialog zu unterdrücken, sodass ich nicht jedes Mal bestätigen muss, dass ich das Verzeichnis auch wirklich anlegen möchte.
Ab jetzt verwende ich bei meinen Befehlen auch überall explizit den Parameter –ea Stop, damit beim Auftreten eines Fehlers die Ausführung des Scripts abgebrochen wird.
Berechtigungen vergeben
Das Script kann jetzt schon eigenständig ausgeführt werden. Es würde, sofern der ausführende Nutzer genügend Berechtigungen hat, funktionieren. Allerdings wird das neue Verzeichnis mit Standard-Berechtigungen angelegt. Insofern der Nutzer also kein Administrator ist, kann er keine Dateien oder Ordner innerhalb seines neuen Home-Verzeichnisses anlegen oder verändern. Diese Berechtigungen geben wir ihm im nächsten Schritt.
Dazu brauchen wir eine Referenz auf die Access Control List (ACL) des eben angelegten Verzeichnisses. Die erhalten wir mit einem simplen Befehl:
Dieser ACL wollen wir jetzt eine neue FileSystemAccessRule hinzufügen, die die entsprechenden Berechtigungsregeln enthält. Hierfür gibt es ein entsprechendes .NET-Objekt, das wir für unsere Zwecke anpassen können. Dazu definiere ich zuerst (mit Hilfe von weiteren .NET-Objekten) diese Eigenschaften, die Berechtigungen und Vererbung festlegen. In diesem Fall möchte ich dem Nutzer erlauben, neue Dateien und Ordner anzulegen und diese auch zu verändern. Dafür definiere ich folgende Eigenschaften:
Einer Übersicht über alle FileSystemRights, die hier definiert werden können, finden Sie in der MSDN unter folgendem Link.
Jetzt müssen wir noch die Vererbung definieren. Im Normalfall wollen wir schließlich auch, dass der Nutzer alle Unterordner und die darin enthaltenen Dateien ändern kann. Dazu definiere ich noch folgende Eigenschaften:
Jetzt haben wir alle Eigenschaften, um ein neues FileSystemAccessRule-Objekt erzeugen zu können. Zusätzlich muss das Objekt aber noch wissen, an wen diese Berechtigungen vergeben werden sollen. Da wir den Nutzer bereits ausgelesen haben, kann ich hier einfach dessen Security Identifier (SID) mit übergeben:
Diese neue Access-Rule füge ich jetzt einfach der ACL hinzu, die wir vorhin ausgelesen hatten.
Im letzten Schritt muss die ACL des Verzeichnisses noch aktualisiert werden. Dazu müssen wir einfach nur die alte ACL mit der neuen ACL, die aus der alten ACL und unserem neuen Eintrag besteht, überschreiben:
Ergebnis
Jetzt können wir das Script aufrufen, einen sAMAccountName eintippen und das Script legt das Verzeichnis an und vergibt die entsprechenden Berechtigungen.
Wenn Sie zu dem neu angelegten Ordner wechseln, können Sie in den Eigenschaften des Ordners die neuen Berechtigungen des Nutzers sehen. Leider werden diese hier als „Special Permissions“ angezeigt, ein Klick auf die „Erweiterten Eigenschaften“ zeigt uns allerdings, dass – wie im Script festgelegt – der Nutzer nur Modify-Berechtigungen besitzt.
Legen Sie Unterordner und Dateien an, können Sie auch hier in den Eigenschaften sehen, dass die Berechtigungen entsprechend richtig weitervererbt werden:
Komplettes Script
Zum Abschluss gibt es hier das komplette Script „Home Directory anlegen“ zum Kopieren & Einfügen:
$fullPath = „\\srv2012r2\Users\{0}“ -f $samAccountName
$driveLetter = „Z:“
$User = Get-ADUser -Identity $samAccountName
if($User -ne $Null) {
Set-ADUser $User -HomeDrive $driveLetter -HomeDirectory $fullPath -ea Stop
$homeShare = New-Item -path $fullPath -ItemType Directory -force -ea Stop
$acl = Get-Acl $homeShare
$FileSystemRights = [System.Security.AccessControl.FileSystemRights]“Modify“
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
$InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]“ContainerInherit, ObjectInherit“
$PropagationFlags = [System.Security.AccessControl.PropagationFlags]“InheritOnly“
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($User.SID, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
$acl.AddAccessRule($AccessRule)
Set-Acl -Path $homeShare -AclObject $acl -ea Stop
Write-Host („HomeDirectory created at {0}“ -f $fullPath)
}
AD User automatisiert mit Homeverzeichnis anlegen
Ein besonders schneller Weg Benutzer anzulegen, ist die Verwendung des FirstWare IDM-Portals. Dies ist bereits mit der SmartEdition möglich.
Die ProEdition bietet die Möglichkeit PowerShell-Skripte wie diesen hier zu integrieren.
Auf diese Weise kann direkt beim Anlegen eines neuen Benutzers auch ein Homeverzeichnis nach eigenen Vorgaben erstellt werden.
Die PowerShell Unterstützung von FirstWare IDM-Portal ermöglicht auch das automatisierte Anlegen von Exchange-Mailboxen und vielem mehr.
Dieser Artikel entstand bei Projekten der FirstAttribute AG
AD Consulting | AD Migration
Für Fragen zu unseren Leistungen stehen
wir Ihnen unter Kontakt gern zur Verfügung.
5 Comments
Leave your reply.