Skip to the main content.

ScriptRunner Blog

Vom Onboarding bis zum Offboarding – 5 Tipps zur einfacheren Verwaltung von Active Directory

Inhaltsverzeichnis

 

 

Post Featured Image

Die Verwaltung von Active Directory-Benutzern und -Gruppen ist eine der zentralen, immer wiederkehrenden Aufgaben der IT-Administration. Nimm am Webinar teil und lies in diesem Blogbeitrag, wo und wie PowerShell den IT-Administratoren hilft, Zeit zu sparen und sich von ständig wiederkehrenden Sisyphusarbeiten zu befreien.

 

Unternehmen aller Größenordnungen können von Automatisierungs- und Skripttools profitieren, die den Arbeitsaufwand für die Verwaltung einer Umgebung verringern können. Diese Art von Effizienz kann auch durch die Verwendung von Skript-Tools wie PowerShell und deren Anwendung auf Active Directory-Szenarien erreicht werden. In diesem Artikel werden wir prüfen, was PowerShell für die täglichen Verwaltungsaufgaben sowie für die Verwaltung von Hintergrund- und Endbenutzern bietet.

 

Reporting

Das Sammeln von Informationen kann für die IT-Abteilung eines jeden Unternehmens eine wahre Goldgrube sein, da es bei den täglichen Aufgaben, der Fehlersuche und sogar bei der Vorbereitung künftiger Änderungen hilfreich sein kann. Dies gilt insbesondere auch für Active Directory (AD), das Herzstück einer Umgebung, das unter anderem Authentifizierungsdienste bereitstellt. Die Erstellung von Reports trägt dazu bei, das Innenleben von AD transparenter zu machen und IT-Administratoren einen besseren Überblick über den aktuellen Zustand von AD zu verschaffen. Welche Arten von Informationen können wir sammeln?

 

Inaktive Nutzer

$InActiveUsers = Get-ADUser -Properties lastlogondate -Filter * | where LastLogonDate -lt ((get-date).AddDays(-90)) | Select Name,UserPrincipalName,LastLogonDate | % { $Date = $_.LastLogonDate;if ($Null -eq $Date) { $_.LastLogonDate = 'Never'}; Return $_}

01_inactive users report

'Inactive Users' Report

Beachte, dass LastLogonDate "Never" anzeigt. Ein neues Konto ohne Anmeldungen hat einen leeren Wert für LastLogonDate, so dass der Einzeiler, mit dem diese Ausgabe erzeugt wird, diesen leeren Wert in "Never" übersetzt, um den Bericht für den Benutzer leichter lesbar zu machen. Die gewählte Anzahl von Tagen, 90, ist willkürlich und kann an die eigenen Richtlinien einer Organisation für das Offboarding oder inaktive Konten angepasst werden (180 Tage? 365 Tage?). Stelle sicher, dass alle Servicekonten oder Konten, die keine aktive Anmeldung im Active Directory erfordern, ausgeschlossen werden.

 

Locked Out Accounts / Gesperrte Konten

Es gibt zwei Möglichkeiten, nach gesperrten Konten zu suchen:

Search-ADAccount -LockedOut -UsersOnly

Und

Get-ADUser -Properties AccountLockoutTime,LockedOut,lockoutTime -Filter * | Where LockedOut -eq $True | ft Name,*lock*

Die zeitgesteuerte Ausführung einer dieser Aktionen kann dazu beitragen, die Zahl der Anrufe oder Tickets zu verringern oder sicherheitsrelevante Informationen über kompromittierte Konten zu liefern.

 

Disabled Accounts / Deaktivierte Konten

Das Auffinden von deaktivierten Konten ist so einfach wie das Auffinden von Konten, bei denen der Wert "Aktiviert" auf "Falsch" gesetzt ist. Es gibt viele Gründe für die Deaktivierung von Konten, z. B. gemeinsam genutzte Postfächer oder verknüpfte Postfächer, und obwohl ein deaktiviertes Konto gültig sein kann, kann dieser Bericht auch Konten aufzeigen, die möglicherweise bereinigt werden müssen.

Get-ADUser -Filter {Enabled -eq $False} | ft

02_disabled users

'Disabled Users' Report

 

Security Reports

Die Active Directory-Sicherheit ist ein weiterer wichtiger Aspekt. Administratoren benötigen Tools, die ihnen helfen, Informationen zu ermitteln, um zu verstehen, wer welche Rollen und Zugriff auf welche Funktionen im AD hat. Diese Aufgabe kann durch die Analyse von Sicherheitsgruppen im AD erfüllt werden. Gruppen wie Schema, Enterprise und andere Administratoren müssen kontrolliert werden, um den unzulässigen Zugriff auf kritische Infrastrukturen zu begrenzen. Mit PowerShell können wir Mitgliedschaften abrufen und feststellen, wie viele Benutzer in diesen Gruppen sind. Mit diesen Informationen können Administratoren feststellen, ob sich zu viele oder zu wenige Benutzer in diesen wichtigen Rollen befinden. Der in dieser Analyse verwendete Code kann auch über die integrierten Sicherheitsgruppen hinaus auf andere Gruppen, die ein Unternehmen erstellt, oder auf andere Systeme, wie z. B. lokale Exchange-Server, angewendet werden. Darüber hinaus können wir den Code bei Bedarf auch für hybride Umgebungen mit Azure AD verwenden.

 

Mitgliedschaft und Anzahl (Beispielhafter Report 'Membership and Count')


# Membership list
$Admins = Get-ADGroup -filter * | where {$_.Name -eq "Administrators"} | Get-ADGroupMember
$DomainAdmins = Get-ADGroup -filter * | where {$_.Name -eq "Domain Admins"} | Get-ADGroupMember
$EnterpriseAdmins = Get-ADGroup -Identity 'Enterprise Admins' -Server $RootDomainDC | Get-ADGroupMember
$SchemaAdmins = Get-ADGroup -Identity 'Schema Admins' -Server $RootDomainDC | Get-ADGroupMember
# Membership count
$AdminCount = ($Admins).Count
$DomainAdminCount = ($DomainAdmins).Count
$EnterpriseAdminCount = ($EnterpriseAdmins).Count
$SchemaAdminCount = ($SchemaAdmins).Count

 

Die Administratoren können dann diese Listen und Auszählungen analysieren, um festzustellen, ob sich zu viele Benutzer in den entsprechenden Gruppen befinden. Ein guter Zeitpunkt, um diese Gruppen zu bewerten, ist, wenn ihre Mitgliederzahl drei übersteigt. Obwohl dieser Wert etwas willkürlich ist, sollten diese Gruppen so klein wie möglich gehalten werden.

 

Formatierung von Reports

Neben dem Sammeln von Informationen kann auch die richtige Formatierung von entscheidender Bedeutung sein, wenn die Informationen von Administratoren überprüft oder der Geschäftsleitung zum täglichen Gebrauch zur Verfügung gestellt werden sollen. Daher ist es bei der Erstellung von Reports wichtig zu wissen, für welche Zielgruppe sie bestimmt sind.

 

TXT/CSV File

Die leichteste und einfachste Methode ist der Export des Inhalts eines PowerShell-Cmdlet in eine Rohdatei zur späteren Analyse. Verfeinerte Eigenschaften und somit die Verwendung von Out-File oder sogar ">" können Ergebnisse aus PowerShell exportieren:

 

Beispiel 1: DHCP-Server im AD

Get-DhcpServerInDC | Out-File $DHCPOutputDestination

Beispiel 2: FSMO-Rolleninhaber

Get-ADDomainController -Server $Domain -Filter * > DomainControllers.txt

 

HTML-Dateien

Die Ausgabe in eine HTML-Datei kann Berichte/Informationen liefern, die für Administratoren und das Management leichter zu lesen sind. Es gibt mehrere Möglichkeiten, diese HTML-Berichte zu erstellen. Eine davon ist nativ in PowerShell mit dem Cmdlet 'ConvertTo-HTML' integriert, die andere ist die Verwendung des PowerShell-Moduls PSWriteHTML.

 

ConvertTo-HTML

Mit diesem kurzen Einzeiler können wir ein relativ ansehnliches Diagramm erstellen. Zunächst müssen wir einen für HTML-Dateien erforderlichen Header definieren und diesen verwenden, um eine CSV-Datei in eine HTML-Datei zu konvertieren.  Nachfolgend findest du einen grundlegenden Codeteil, um das zu tun:


# Define Style for HTML file
$Header = "<style>"
$Header = $Header + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$Header = $Header + "TH{border-width: 1px;padding: 2px;border-style: solid;border-color: black;}"
$Header = $Header + "TD{border-width: 1px;padding: 2px;border-style: solid;border-color: black;}"
$Header = $Header + "</style>"
# Convert CSV to HTML
$Output = Import-CSV <Output CSV File>
$Output | ConvertTo-HTML -Head $Header | Set-Content -Path <Output HTML file>

Ausgabe deaktivierte Nutzer (Beispiel):

03_disabled users report in HTML format

'Disabled Users' Report im HTML-Format

 

PSWriteHTML

Obwohl dieses Modul weitaus mehr kann als HTML-Diagramme zu erstellen, bietet diese Anwendung einen guten Einstieg in die Verwendung eines leistungsstarken Moduls für die Berichterstattung. Ähnlich wie bei ConvertTo-HTML haben wir diesen schnellen Einzeiler unter Verwendung der Variable Disabled Users:

$DisabledUsers | Out-HtmlView

04_disabled users report in PSWriteHTML format

'Disabled Users' Report im PSWriteHTML-Format

 

Passwort zurücksetzen

Das Zurücksetzen von Kennwörtern kann mühsam sein. Daher ist es einfacher, einen Code zu erstellen, der ein zufälliges Kennwort erstellt und es dann für ein bestimmtes Benutzerkonto festlegt. Beachte, dass wir zwei Sicherheitskriterien angeben müssen: die geeignete Länge und die Anzahl der nicht alphanumerischen Zeichen für das Passwort.


Function RandomPassword {
Add-Type -AssemblyName 'System.Web'
$length = 10
$nonAlphaChars = 5
$NewPassword = [System.Web.Security.Membership]::GeneratePassword($length, $nonAlphaChars)
$SecurePassword = ConvertTo-SecureString -String $NewPassword -AsPlainText -Force
Return $SecurePassword
}

 

RandomPassword

Set-ADAccountPassword Sam -Reset -NewPassword $SecurePassword

*Weiterführende Informationen zu [System.Web.Security.Membership] findest du auf Microsoft Learn.

 

Konto freischalten 

So findest du zunächst einmal die Benutzer, die gesperrt sind:

Get-ADUSer -Filter * -Properties LockedOut | Where LockedOut -eq $True

Wir können diese Zeile so ändern, dass ein Administrator wählen kann, welches Konto er entsperren möchte:


$AccountsToUnlock = Get-ADUser -Filter * -Properties LockedOut | Where LockedOut -eq $True | Out-GridView -PassThru

Foreach ($AccountToUnlock in $AccountsToUnlock) { Unlock-ADAccount $AccountToUnlock }

Wenn dieser Code ausgeführt wird, wird ein Pop-up-Fenster angezeigt, in dem der Administrator ein oder mehrere Konten zum Entsperren auswählen kann:

 05_select and unlock with unlock-ADAccount cmdlet

Nach der Auswahl werden die entsprechenden Konten dann mit dem Cmdlet "Unlock-ADAccount" entsperrt

 

Onboarding neuer Benutzer

Wenn ein neuer Benutzer in ein Unternehmen aufgenommen wird, müssen einige Konten eingerichtet werden, und die für diese Einrichtung verantwortlichen Personen haben in der Regel eine Aufgabenliste zu erfüllen, um sicherzustellen, dass der erste Tag eines neuen Mitarbeiters so einfach wie möglich ist.

 

Zuweisung von Gruppen, Home Drive und Login Script nach Abteilung


 # Settings - Groups, HomeDirectory, HomeDrive, ScriptPath
Function ConfigureUserSettings {
 Param ($User)
 $Department = $User.Department
 write-host "department = $Department"
 If ($Department -eq 'Marketing') {
  Add-ADGroupMember -Identity Marketing -Members $User
  Set-ADUser $User -HomeDirectory '\\fs01\homedir\Marketing\$User' -HomeDrive 'M:' -ScriptPath '\\adlab01-dc01\netlogon\Marketing-Logon.bat'
 }
 If ($Department -eq 'Human Resources') {
  Add-ADGroupMember -Identity 'Human Resources' -Members $User
  Set-ADUser $User -HomeDirectory '\\fs01\homedir\Human Resources\$User' -HomeDrive 'H:' -ScriptPath '\\adlab01-dc01\netlogon\HR-Logon.bat'
 }
 If ($Department -eq 'Research and Development') {
  Add-ADGroupMember -Identity 'Research and Development' -Members $User
  Set-ADUser $User -HomeDirectory '\\fs01\homedir\Resource and Development\$User' -HomeDrive 'R:' -ScriptPath '\\adlab01-dc01\netlogon\RnD-Logon.bat'
 }
 If ($Department -eq 'Information Technology') {
  Add-ADGroupMember -Identity 'Information Technology' -Members $User
  Set-ADUser $User -HomeDirectory '\\fs01\homedir\Information Technology\$User' -HomeDrive 'I:' -ScriptPath '\\adlab01-dc01\netlogon\IT-Logon.bat'
 }
}
# Main Body
$OU = 'OU=Mailboxes,DC=ADLab01,DC=Local'
$Users = get-aduser -SearchBase $OU -Filter * -Properties Department
Foreach ($User in $Users) {
 ConfigureUserSettings $User
 Write-Host "... Completed User $User ..."
}
 

Das obige Skript kann nun so modifiziert werden, dass andere Attribute verwendet werden, um zu bestimmen, welche Einstellungen gelten, z. B. ein benutzerdefiniertes Attribut, eine Organisationseinheit (OU) oder vielleicht ein Titel. Ebenso kann die verwendete OU an die OU-Struktur einer Organisation angepasst werden.

 

Einplanung dieser Aufgabe (Scheduling)

Da diese Änderungen nur vorgenommen werden können, wenn ein Skript ausgeführt wird, kann  die Automatisierung des Skripts die Arbeit erleichtern. Mithilfe einer Jump-Box und dem Task Scheduler kann dieses Skript täglich (oder häufiger/seltener) ausgeführt werden, um sicherzustellen, dass den Benutzern die richtigen Gruppen, das richtige Stammlaufwerk und das richtige Anmeldeskript zugewiesen werden. Tipps zur Planung finden Sie im Blogbeitrag des Autors 'Schedule It!'.

 

Offboarding

Konto deaktivieren, in die OU "Deaktivierte Konten" verschieben, Kennwort ändern

Wenn ein Benutzer ein Unternehmen verlässt, hat die IT-Abteilung in der Regel einen definierten Prozess für den Umgang mit seinem Benutzerkonto. Dazu gehören manchmal das Deaktivieren des Kontos, das Verschieben in eine OU "Deaktivierte Konten" und sogar das Ändern des Kennworts. Diese Aufgaben können alle mit PowerShell durchgeführt werden.


$CSV = Import-CSV '\\fs01\Departments\HR\Terminations\Monthly.csv'
Foreach ($Account in $CSV) {
$User = Get-ADUser $Account
$DisabledOU = 'OU=Disabled Accounts,DC=ADLab01,DC=Local'
RandomPassword
Set-ADAccountPassword $User -Reset -NewPassword $SecurePassword
$UserId = $User.ObjectGUID
Move-ADObject $UserId -TargetPath $DisabledOU
Disable-ADAccount $User
}

Beachten Sie die Verwendung der RandomPassword-Generatorfunktion, die wir im ersten Teil dieses Artikels verwendet haben. Die Wiederverwendung von Code ist wichtig, da sie dazu beiträgt, den Verwaltungsaufwand zu verringern, da Codeblöcke nicht bei jeder Aufgabe neu erstellt werden müssen. 

In einer hybriden Umgebung ist Vorsicht geboten, wenn die OU, in die ein Konto verschoben wird, nicht synchronisiert wird, da dies möglicherweise zu Datenverlust und Verlust des Zugriffs auf das Benutzerkonto in Azure AD, OneDrive, SharePoint, Teams usw. führen würde. In diesen Szenarien ist es besser, entweder das Konto zu deaktivieren/das Passwort zu ändern oder nur das Passwort zu ändern.

 

Fazit 

Die Verwaltung von Active Directory ist eine komplizierte Aufgabe, für die du als Administrator über die richtigen Tools und Kenntnisse verfügen musst. Die Verwendung der gleichen PowerShell-Kenntnisse mit Active Directory kann die Verwaltung tatsächlich vereinfachen. Durch die Automatisierung der täglichen Aufgaben kannst du dich auf andere Projekte konzentrieren. In diesem Artikel haben wir nur an der Oberfläche dessen gekratzt, was PowerShell im Hinblick auf die Administration von Active Directory leisten kann, aber hoffentlich haben diese Beispiele die Neugier geweckt und Lust darauf gemacht, was damit zukünftig noch alles möglich ist.

Ein weiterer Ratschlag, bevor du dich aufmachst, um zu erforschen, wie PowerShell dir helfen kann: Wenn du eine Aufgabe automatisierst, stelle auf jeden Fall sicher, dass das Skript, die Anmeldeinformationen (Credentials) etc. sicher sind, damit dein Code oder Zugriff nicht missbraucht werden kann.

 

Good2know

Webinar: Active Directory Management

Die Verwaltung von Active Directory Benutzern und Gruppen gehört zu den zentralen, wiederkehrenden Aufgaben der IT-Administration.

Zum Beispiel sind neue Benutzer und Gruppen anzulegen, Gruppenmitgliedschaften zu managen oder Reports zu erstellen.

In diesem Webinar zeigen wir, wie diese Aufgaben zeitsparend mit PowerShell standardisiert, automatisiert und delegiert werden können.

webinar-active-directory

 

Im Webinar schauen wir uns an, wie...:

  • ...sich wiederholende Aufgaben mit dem PowerShell Active Directory Modul automatisiert werden können
  • ...typische Use Cases mithilfe unseres ScriptRunner ActionPacks für Active Directory umgesetzt werden
  • ...zeitlich geplante Reports mit PowerShell erstellen werden
  • ...Active Directory Management-Aufgaben sicher an Helpdesk-Mitarbeiter delegiert und Self-Services End-Benutzern zur Verfügung gestellt werden
  • ...und wie die PowerShell-Aktivitäten überwacht werden können

 

 

Hier geht es zur Webinar-Aufzeichnung

 

 

 

Weiterführende Links

Zusammenhängende Posts

Über den Autor: