14 min read
Microsoft Teams – 3. Teil der Graph PowerShell Reihe
MVP Damien Scoles berichtet über seine Erfahrungen mit Microsoft Graph. In seinem dritten Artikel geht er näher auf...
ScriptRunner Blog
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.
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?
$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 $_}
'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.
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.
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
'Disabled Users' Report
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.
# 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.
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.
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:
Get-DhcpServerInDC | Out-File $DHCPOutputDestination
Get-ADDomainController -Server $Domain -Filter * > DomainControllers.txt
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.
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):
'Disabled Users' Report im HTML-Format
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
'Disabled Users' Report im PSWriteHTML-Format
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
}
Set-ADAccountPassword Sam -Reset -NewPassword $SecurePassword
*Weiterführende Informationen zu [System.Web.Security.Membership] findest du auf Microsoft Learn.
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:
Nach der Auswahl werden die entsprechenden Konten dann mit dem Cmdlet "Unlock-ADAccount" entsperrt
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.
# 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.
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!'.
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.
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.
Die Verwaltung von Active Directory ist eine der zeitaufwändigsten wiederkehrenden Aufgaben für viele IT-Administratoren und System Engineers.
Die Erstellung und Verwaltung von Benutzern und Gruppen, die Administration von OUs und Computer Accounts sowie die Generierung detaillierter AD-Berichte stehen ständig auf der To-Do-Liste.
Wir zeigen dir, wie du alle Active Directory-Prozesse und Aufgaben optimieren, automatisieren, delegieren und überwachen kannst.
Spare Zeit, reduziere Fehler und konzentriere dich auf wichtige IT-Projekte.
Wir senden übrigens über unseren Newsletter die Termine und Themen der nächsten Webinare.
Okt 30, 2024 by Damian Scoles
MVP Damien Scoles berichtet über seine Erfahrungen mit Microsoft Graph. In seinem dritten Artikel geht er näher auf...
Okt 16, 2024 by Damian Scoles
Wie unterscheidet sich die Exchange Online-Administration mit dem Microsoft Graph PowerShell-Modul vom herkömmlichen...
Okt 8, 2024 by Damian Scoles
Die ein oder andere Hürde steht Nutzern im Weg, wenn sie anfangen Graph zu nutzen. In drei Teilen liefert Damian Hilfe....
Damian Scoles ist ein zehnfacher Microsoft MVP mit Spezialisierung auf Exchange, Office 365 und PowerShell, der über 25 Jahre Erfahrung in der IT-Branche mitbringt. Er ist im Großraum Chicago ansässig und begann mit der Verwaltung von Exchange 5.5 und Windows NT. Im Laufe der Jahre hat er mit Office 365 seit BPOS gearbeitet und darüber hinaus Erfahrung mit Azure AD, Security and Compliance Admin Centers und Exchange Online. Zu seinem Engagement in der Community gehören Beiträge in TechNet-Foren, die Erstellung von PowerShell-Skripten, die in seinen Blogs zu finden sind, das Schreiben von ausführlichen PowerShell/Office365/Exchange-Blogartikeln, Tweets und die Erstellung von PowerShell-Videos auf YouTube. Er hat fünf PowerShell-Bücher geschrieben und arbeitet außerdem aktiv an dem Buch "Microsoft 365 Security for IT Pros".