Home-Verzeichnisse automatisiert erstellen - mit PowerShell!

Lesedauer 5 Minuten

In vielen Unternehmen stehen den Mitarbeitenden immer noch persönliche Verzeichnisse auf dem Dateiserver - die sogenannten Home-Verzeichnisse zur Verfügung. Hier können Dateien abgelegt werden, die nur für den persönlichen Gebrauch relevant sind (idealerweise jedoch keine Musiksammlungen 😉).

Während es mittlerweile modernere Ansätze hierfür gibt - beispielsweise OneDrive und die damit verbundene Umleitung bekannter Ordner - mögen nicht alle Unternehmen diese Ansätze nutzen können oder wollen. Für die Erstellung der Home-Verzeichnisse gibt es verschiedene Ansätze:

  • Manuell (Ordner anlegen und Berechtigungen vergeben)
  • Automatisiert über das Benutzerobjekt in Active Directory (Berechtigungen werden automatisch korrekt zugewiesen)
  • Automatisiert über Skripte

Gerade die zweite Variante sehe ich immer wieder. Diese ist aber auch gleichzeitig die gefährlichste, weil ich hierfür Rechte sowohl im Active Directory als auch auf dem Dateiserver benötige, auf dem der Ordner erzeugt wird. Dies widerspricht jedoch gängigen Sicherheitsprinzipien wie dem Stufenmodell (auch als "Tiering-Modell" bezeichnet).

Wie kann ich dies also automatisieren und gleichzeitig sicher gestalten? Die Antwort lautet: PowerShell!

Voraussetzungen

Die Liste an Voraussetzungen ist recht gering:

  • Dienstkonto mit lesendem Zugriff auf Active Directory - hierfür empfiehlt sich die Verwendung eines gruppenverwalteten oder eines delegierten verwalteten Dienstkontos (gMSA oder dMSA), da hier keine Kennwörter verwendet/hinterlegt werden müssen.
  • Geplante Aufgabe - diese kann entweder auf einem Dateiserver, einem Sprungserver für Tier 1 oder einem speziell dafür genutzten Aufgabenserver bereitgestellt werden.
  • PowerShell-Skript - dieses kannst Du aus meinem Skriptnest herunterladen.

Einrichtung des Dienstkontos

Zunächst muss ein Dienstkonto im Active Directory eingerichtet werden. Die folgenden Kapitel gehen auf die modernen Typen gMSA und dMSA ein, da die Erstellung eines herkömmlichen Benutzerkontos keine besondere Herausforderung sein sollte. 😉

Einrichtung des KDS-Stammschlüssels

Für beide Kontentypen muss in Active Directory zunächst ein Schlüsselverteilungsdienst-Stammschlüssel (KDS, Key Distribution Service) erstellt werden. Dies ist nur mittels PowerShell möglich. Die Parameter sorgen dafür, dass der Schlüssel sofort wirksam wird:

# Stammschlüssel anlegen und Aktivierung auf einen Zeitpunkt vor 10 Stunden legen
Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))
PowerShell

Erstellung einer Gruppe für zugelassene Systeme

Bei beiden Kontentypen müssen die zugelassenen Systeme explizit konfiguriert werden. Um dies im Nachhinein flexibel anpassen zu können, ist hierfür eine Active Directory-Gruppe anzulegen. Der Gruppentyp ist prinzipiell irrelevant, üblicherweise wird eine domänenlokale Sicherheitsgruppe verwendet.

Das bzw. die Computerkonten, die das MSA nutzen sollen, müssen in die Gruppe aufgenommen werden. Um den eigentlich dadurch notwendigen Neustart zu vermeiden, kann folgender Befehl auf den Systemen ausgeführt werden, um die Kerberos-Tickets für das Computerkonto zu löschen:

klist purge –li 0x3e7
BAT (Batchfile)

Erstellung des Dienstkontos

Bei der Auswahl des Dienstkontentyps kommt es darauf an, welches Betriebssystem von Domänencontrollern und Zielsystem(en) verwendet wird:

  • Ein gMSA kann bereits ab Windows Server 2008 R2 genutzt werden.
  • Ein dMSA kann erst ab Windows Server 2025 genutzt werden, wobei sowohl Domänencontroller als auch Zielsystem(e) davon betroffen sind.

Es scheint nicht möglich zu sein, ein dMSA für geplante Aufgaben zu verwenden, da die Zuweisung des Kontos zur geplanten Aufgabe fehlschlägt. Die Dokumentation von Microsoft sagt hierzu nichts. Bis ich eine klare Aussage finde, lasse ich die Anleitung vorerst bestehen.


Das Konto muss per PowerShell angelegt werden. Der Name kann beliebig gewählt werden, sollte aber dem eigenen Benennungskonzept für Dienstkonten entsprechen.

Hinweis: es dürfen maximal 15 Zeichen verwendet werden:

# Active Directory-Domäne und Gruppennamen ermitteln
$ADFQDN = (Get-ADDomain).DnsRoot
$ADGroup = Read-Host 'Bitte Namen der Gruppe eingeben'
$MSAName = Read-Host 'Bitte Namen des Dienstkontos eingeben'
$Description = Read-Host 'Bitte Beschreibung eingeben'
$DNSHostName = $MSAName + '@' + $ADFQDN

# Variante A: gMSA anlegen
New-ADServiceAccount -Name $MSAName -DNSHostName $DNSHostName -PrincipalsAllowedToRetrieveManagedPassword (Get-ADGroup -Identity $ADGroup).DistinguishedName -KerberosEncryptionType 'AES256'

# Variante B: dMSA anlegen
New-ADServiceAccount -Name $MSAName -DNSHostName $DNSHostName -PrincipalsAllowedToRetrieveManagedPassword (Get-ADGroup -Identity $ADGroup).DistinguishedName -KerberosEncryptionType 'AES256' -CreateDelegatedServiceAccount

# Nur Variante B: dMSA aktivieren
Set-ADServiceAccount DMSA-0001 -Replace @{"msDS-DelegatedMSAState" = 3}
PowerShell

Wenn der Lesezugriff auf Active Directory eingeschränkt ist, so muss das Dienstkonto anschließend berechtigt werden, lesend auf das Active Directory bzw. die Organisationseinheit zuzugreifen, in der sich die Benutzerkonten befinden.

Aktivierung der Verwendung von MSA auf Zielsystem

Für die Ausführung geplanter Aufgaben muss das Dienstkonto die Berechtigung "Anmelden als Stapelverarbeitungsauftrag" auf dem Zielsystem erhalten. Dies kann per Gruppenrichtlinie oder über die lokale Sicherheitsrichtlinienkonsole umgesetzt werden:

Computerkonfiguration > Richtlinien > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien > Zuweisen von Benutzerrechten

  • Einstellung: Anmelden als Stapelverarbeitungsauftrag; Dienstkonto zur Liste hinzufügen

Wird ein dMSA eingesetzt, so muss zusätzlich eine Einstellung per Gruppenrichtlinie oder lokaler Registry-Einstellung an das Zielsystem verteilt werden:

Computerkonfiguration > Richtlinien > Administrative Vorlagen > System > Kerberos

  • Einstellung: Anmeldungen für delegierte verwaltete Dienstkonten aktivieren

Bereitstellung des Skripts

Das Skript muss auf dem Zielsystem bereitgestellt werden. Von dort aus wird es im nächsten Schritt in die geplante Aufgabe eingebunden. Das Skript muss noch an die individuellen Einstellungen der eigenen Organisation (bspw. OU- und Dateipfade) angepasst werden.

Tipp: um lokal ausgeführte Skripte schnell ermitteln zu können, wird empfohlen, diese in einem Ordner gesammelt abzulegen, z.B. C:\AUFGABEN.

Einrichtung der geplanten Aufgabe

Auf dem Zielsystem kann nun die geplante Aufgabe eingerichtet werden. Hierzu ist die Konsole "Aufgabenplanung" zu starten (Kommandozeile: tasksched.msc).

Tipp: um benutzerdefinierte Aufgaben eindeutig von anderen Aufgaben unterscheiden zu können, ist es empfehlenswert, einen Unterordner anzulegen und diesen genauso zu benennen wie den Ordner im Dateisystem (z.B. "AUFGABEN").

Dieser Ordner bündelt dann alle selbst hinzugefügten Aufgaben.

In der Aufgabenplanung sind die folgenden Schritte durchzuführen. Die angegebenen Parameter sind beispielhaft und können an die eigenen Bedürfnisse angepasst werden:

  • "Aufgabe erstellen" auswählen
BereichEinstellung(en)
NameHome-Verzeichnisse automatisiert erstellen
BeschreibungErmittelt an Wochentagen zwischen 7-18 Uhr alle Benutzerobjekte und erstellt fehlende Home-Verzeichnisse.
TriggerWöchentlich, Mo.-Fr.
Start: 7 Uhr
Für 11 Stunden wiederholen
AktionenProgramm starten
- Programm/Skript: powershell.exe
- Argumente: -File "C:\AUFGABEN\Create-HomeFoldersFromAD.ps1"
EinstellungenAufgabe beenden, falls Ausführung länger als: 1 Stunde

Sofern ein herkömmliches Dienstkonto verwendet wird, kann dieses ebenfalls über den Assistenten hinterlegt werden ("Unabhängig von der Benutzeranmeldung speichern"). Wird ein verwaltetes Dienstkonto verwendet, so muss dieses nach Erstellung der Aufgabe über PowerShell hinzugefügt werden:

# Dialog zur Auswahl der geplanten Aufgabe anzeigen
$Selection = Get-ScheduledTask | Where-Object {$_.TaskPath -notlike '\Microsoft\*'} | Out-Gridview -Title 'Bitte geplante Aufgabe auswählen' -OutputMode:Single
$MSAName = 'Bitte Namen des Kontos im Format DOMÄNE\NAME eingeben '

# Benutzernamen in benötigtes Format bringen
$MSAName = $MSAName + '$'

# Dienstkonto bei gewählter geplanter Aufgabe hinterlegen
Set-ScheduledTask -Taskname "$Selection.TaskName" -TaskPath "$Selection.TaskPath" -Principal (New-ScheduledTaskPrincipal -UserId $MSAName -LogonType Password)
PowerShell

Wenn die Ansicht in der Aufgabenplanung aktualisiert wird, ist das Dienstkonto nun der geplanten Aufgabe zugewiesen.

Funktionstest

Zeit für einen Test! Die Aufgabe kann mit einem Rechtsklick direkt ausgeführt werden. Normalerweise sollte die Ausführung des Skripts nicht lange dauern (in Abhängigkeit davon, wie viele Benutzer vorhanden sind).

Wurde alles richtig konfiguriert, sollten fehlende Ordner im Stammordner für die Home-Verzeichnisse auftauchen. Sind bereits alle Ordner vorhanden, sollte im Active Directory ein Testbenutzer angelegt werden, um die Funktionalität des Skripts zu verifizieren.



Gefällt Dir der Beitrag? Lass es andere wissen!