Africa Studio - stock.adobe.com
Einrichten von Usern mit PowerShell und Active Directory
Zur Durchführung dieser Aufgaben müssen die Administratoren eine Reihe von Installationsschritten ausführen. Der Artikel gibt eine detaillierte Anleitung hierzu.
Administratoren müssen Aufgaben schnell und effizient erledigen, was besonders für die Masse der Code-Eingaben gilt. Die PowerShell ist für diese Art von Aufgaben gut vorbereitet, gerade wenn man mit dem Active Directory arbeitet.
Die User-Verwaltung nimmt oft einen Löwenanteil der Arbeit mit dem Directory Service ein, gerade auch in größeren Unternehmen. Wenn es darum geht, die User-Daten aktuell zu halten, kann das bei der Arbeit mit einem GUI-Tool einen großen Aufwand bedeuten, doch ein paar Kommandos der PowerShell Active Directory können diese lästige Pflicht weniger anstrengend machen.
Einrichten der Tools für das Active Directory User-Management
Bevor man die User mit dem Active Directory verwalten kann, braucht man die richtigen Tools. Man sollte nie direkt auf dem Domain Controller arbeiten. Man aktiviert die Remote Server Administration Tools (RSAT) von Microsoft, einschließlich der Active Directory Tools. Man muss sich diejenige Version heraussuchen, die mit der vorhandenen Microsoft-Installation zusammenpasst. Wenn man das Update von Windows 10 October 2018 oder jünger nutzt, kann man RSAT als optionales Feature mit dem folgenden Befehl installieren:
Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online
RSAT umfasst die GUI-Tools, Active Directory User und Computer sowie das PowerShell-Modul.
Sind die Versionen Windows 10 October 2018 update, Windows Server 1809, Windows Server 2019 oder jünger im Einsatz und Active Directory RSAT ist als optionales Feature installiert, funktioniert das Modul von Active Directory PowerShell in dem PowerShell Core v6.1.1.
Frühere Versionen des Betriebssystems erfordern Windows PowerShell oder PowerShell Core, um das WindowsCompatibility-Modul aus der PowerShell Gallery einzusetzen und den entfernten Zugang zur Windows PowerShell-5.1-Funktionalität zu öffnen. Das WindowsCompatibility-Modul erfordert PowerShell Core 6.1 oder jüngere Versionen.
Wie man User-Accounts mit PowerShell erzeugt
Wenn die notwendigen Hilfsmittel eingerichtet sind, kann man die User Accounts des Active Directory in ihrem normalen Lebenslauf verwalten: einrichten, modifizieren und auflösen.
In unserem Beispiel fügen wir einen User mit Namen Bob Smith hinzu. Es ist ein Minimum an Informationen erforderlich, um einen AD-Account zu erzeugen:
New-ADUser -Name "SMITH Bob" -SamAccountName bobsmith -AccountPassword $secpass `
-Enabled:$true -Path 'OU=UserGroups,DC=Manticore,DC=org' -PassThru
Ein User Account muss mehrere Bedingungen erfüllen. Das Passwort muss stark genug sein, um den Account zu öffnen. Der Name muss in dem Unternehmen oder der Organisationseinheit (OU, organizational unit) einzigartig sein, und der SamAccountName (login ID) muss in dem Active-Directory-Feld einmalig sein. Wenn man keinen OU (gekennzeichnet durch einen -Pfad-Parameter) bereitstellt, landet der Account in dem Container für ungültige User. Der endgültige Parameter „-PassThru“ zeigt die Account-Information an.
Alle Informationen für einen Account einzutragen bedeutet, eine Menge zu tippen. Und die Arbeit nimmt zu, wenn man mehrere Accounts einrichten muss. Ein leichterer Weg, um zahlreiche User hinzuzufügen, besteht in dem Import der Daten durch eine CSV-Datei:
$secpass = Read-Host -Prompt "Password" -AsSecureString
Import-Csv -Path c:\scripts\newusers.csv |
foreach {
New-ADUser -Name $_.Name -SamAccountName $_.samaccountname `
-AccountPassword $secpass -Enabled:$true `
-Path 'OU=UserGroups,DC=Manticore,DC=org'
}
In dem Skript habe ich irrtümlich die Accounts ‘OU=UserGroups,DC=Manticore,DC=org’ erzeugt, wenn sie eigentlich so lauten sollten: ‘OU=UserAccounts,DC=Manticore,DC=org’. Um dieses Problem zu lösen, verwendet man das cmdlet Move-ADObject, um die Accounts zwischen den OUs zu verschieben:
Get-ADUser -Filter * -SearchBase 'OU=UserGroups,DC=Manticore,DC=org' |
Move-ADObject -TargetPath 'OU=UserAccounts,DC=Manticore,DC=org'
Wenn man Get-ADUser nutzt, um Accounts in der angesammelten Menge aufzuspüren, muss man immer einen Filter einsetzen. Dies ist eine eher ärgerliche Designentscheidung, aber weil es ein obligatorischer Parameter ist, wird man eine Kommandozeile bekommen, die danach fragt, bevor es zu einem Kommandofehler kommt. Der Grund dafür könnte sein, dass man so eine Blockade verhindert, wenn Suchanfragen gegen sehr große Active-Directory-Datenbanken laufen.
Ich habe den User Bob Smith durch das cmdlet Get-ADUser mit minimalen Informationen geschaffen:
Get-ADUser -Identity bobsmith
Der -Identity-Parameter fragt den spezifischen User Account ab. Der Account-Identifikator kann der SamAccountName, der hervorragende Name, der Global Unique Identifier oder der Security-Identifikator (objectSID) sein.
Standardmäßig erhält man nur die wesentlichen Eigenschaften, die Get-ADUser darstellt. Wenn man alle Eigenschaften sehen will, nutzt man:
Get-ADUser -Identity bobsmith -Properties *
Oder man kann eine Gruppe von Eigenschaften auswählen, die auch die standardmäßigen Eigenschaften abfragt:
Get-ADUser -Identity bobsmith -Properties CanonicalName, Created, LockedOut, PasswordExpired, ProtectedFromAccidentalDeletion
Wenn man PowerShell Core 6.1.1 zusammen mit dem Active-Directory-Modul einsetzt, produziert die Kombination des -Properties-Parameter mit dem Merkmal ProtectedFromAccidentalDeletion einen Fehler. Wechselt man zu Windows PowerShell 5.1 und den Active-Directory-Cmdlets mit dem Modul WindowsCompatibility wird das Problem vermieden, das nun unter Beobachtung des PowerShell-Teams steht.
Man kann die meisten Active-Directory-Eigenschaften des Users durch die Set-ADUser cmdlet-Parameter verwalten. Das folgende Kommando zeigt, was vorhanden ist:
Get-Command Set-ADUser -Syntax
Um Fehler zu vermeiden, ziehe ich es vor, das User-Objekt als Test zu nehmen und es dann zu wiederholen und in Set-ADUser zu verlegen:
Get-ADUser -Identity bobsmith | Set-ADUser -UserPrincipalName '[email protected]'
Man kann gleichzeitig mehrere Eigenschaften festlegen:
Get-ADUser -Identity bobsmith | Set-ADUser -GivenName 'Bob' -Surname 'Smith' -PassThru
Der -Passthru-Parameter hilft bei der Kontrolle der Änderungen.
Es gibt ein paar Stellen im Active Directory, an denen man andere Werte jenseits der primären Einstellung eingeben kann – wie zum Beispiel andere Telefonoptionen.
Set-ADUser besitzt keine direkten Parameter für diese Einstellungen, aber man kann die allgemeinen Parameter von Set-ADUser benutzen:
Add: Fügt einen oder mehrere Werte hinzu;
Clear: Entfernt alle Werte;
Remove: Entfernt einen Wert; und
Replace: Ersetzt aktuelle durch neue Werte.
Wenn man mehr als einen dieser Parameter benutzt, ist die Rangfolge: Remove, Add, Replace und Clear.
Man gibt die erforderlichen Daten als einen Hash Table ein:
Get-ADUser -Identity bobsmith | Set-ADUser -Add @{otherHomePhone = '01234 567890', '01234 987654'}
User-Informationen wiederverwenden, um die Arbeit zu erleichtern
Einige Administratoren des Active Directory kopieren Informationen von einem User Account zu einem anderen, um häufiges Tippen und manuelle Fehler zu vermeiden. Um dies ebenfalls so zu machen, erzeugt man am besten ein Object mit den erforderlichen Daten der Eigenschaften aus einem bekannten User Accont:
$source = Get-ADUser -Identity bobsmith -Properties OfficePhone, otherHomePhone
Dann benutzt man Set-SADUser, um die Werte für den Ziel-Account festzulegen:
Set-ADUser -Identity EmilySmith -Replace @{telephoneNumber = $($source.OfficePhone); otherHomePhone = $($source.otherHomePhone)}
Ich habe den -Identity-Parameter für diesen Fall genutzt. Die allgemeinen Parameter – Add, Clear, Remove und Replace – benutzen den LDAP-Namen (Lightweight Directory Access Protocol) für die Active-Directory-Eigenschaft und nicht die benutzerfreundlichere Version, die bei den Active-Directory-Cmdlets zum Einsatz kommt. Für dieses Beispiel verwende ich die OfficePhone-Eigenschaft, die die „telephoneNumber“ LDAP-Eigenschaft abbildet:
Get-ADUser -Identity emilysmith -Properties * | select *phone*
HomePhone :
MobilePhone :
OfficePhone : 07787 293847
otherHomePhone : {01234 567890, 01234 987654}
telephoneNumber : 07787 293847
OfficePhone ist identisch mit dem Wert von telephoneNumber. Man organisiert das Mapping mit den Active-Directory-Cmdlets. Und man sollte sicher sein, in diesen Fällen mit dem wirklichen LDAP-Eigenschaftsnamen zu arbeiten.
Vertrauen, aber immer verifizieren, bevor man einen User löscht
Der letzte Akt im Lebenszyklus eines User Objects ist seine Auflösung:
Remove-ADUser -Identity emilysmith -whatif
What if: Performing the operation "Remove" on target "CN=SMITH Emily,OU=UserAccounts,DC=Manticore,DC=org".
Man sollte immer mit „-WhatIf“ testen, um sicherzustellen, dass man den richtigen Account entfernt. Wenn man aus Versehen den Account seines Vorgesetzten löscht, wird das nicht ohne Konsequenzen bleiben.
Zeit sparen bei der Suche nach Usern
Mit ein paar praktischen Parametern ist man in der Lage, einige der besonders schwierigen Suchen nach Usern schnell und einfach zu bewältigen.
Ausgesperrte User finden: Search-ADAccount -LockedOut
User mit abgelaufenen Passwörtern finden: Search-ADAccount -PasswordExpired
Abgelaufene Accounts finden: Search-ADAccount -AccountExpired
Search-ADAccount kann auch Accounts aufspüren, die bald ablaufen werden, nicht funktionieren, nicht aktiv sind oder Passwörter besitzen, die nie ablaufen werden.
Karteileichen entfernen
Eine wichtige Aufgabe der Active-Directory-Verwaltung besteht darin, Accounts von Usern zu entfernen, die das Unternehmen verlassen haben. Man kann solche User herausfinden, die sich nicht mehr für eine bestimmte Zeitperiode eingeloggt haben:
$testdate = (Get-Date).AddDays(-90)
Get-ADUser -Filter * -Properties LastLogonDate | where {$_.LastLogonDate -And $_.LastLogonDate -le $testdate}
Dieser Code spürt User auf, die sich 90 Tage lang nicht eingeloggt haben. Hat man sie gefunden, kann man sie in ein Archiv-OU verschieben und sie anschließend nach weiteren 90 Tagen oder einer beliebigen anderen, vom Unternehmen festgesetzten Zeitspanne löschen.