Zum Inhalt springen

Tag 2 · Block 3: Active Directory, Remoting und Module

Core🖥 DC01, PSLAB-01 bis -03

Deine Umgebung: Domäne pslab.internal, Domänencontroller DC01, Kursrechner PSLAB-01 bis PSLAB-03. Du bist als PSLAB\teilnehmerNN angemeldet (NN ist deine Nummer, zum Beispiel 01). Du darfst in deiner eigenen OU OU=T01,OU=Uebung,OU=Kurs,DC=pslab,DC=internal (bzw. T02, T03) Objekte anlegen. Überall sonst darfst du nur lesen.

3.1 · Domäne und Benutzer ansehenÜbung🚫 KI-frei lösen
  1. Lade das Modul ActiveDirectory und zeige Informationen zur Domäne an.
  2. Zeige dich selbst als AD-Benutzer an, mit den Eigenschaften Department, Title und LastLogonDate.
  3. Wie viele Benutzer hat die OU OU=Benutzer,OU=Kurs,DC=pslab,DC=internal?
  4. Welche Benutzer gehören zur Abteilung IT? Gib nur Name und SamAccountName aus.
Lösung anzeigen
Terminal-Fenster
Import-Module ActiveDirectory
Get-ADDomain
Get-ADUser -Identity $env:USERNAME -Properties Department, Title, LastLogonDate |
Select-Object Name, Department, Title, LastLogonDate
Get-ADUser -Filter * -SearchBase "OU=Benutzer,OU=Kurs,DC=pslab,DC=internal" | Measure-Object
Get-ADUser -Filter "Department -eq 'IT'" -Properties Department |
Select-Object Name, SamAccountName
3.2 · Konten mit ProblemenÜbung🚫 KI-frei lösen
  1. Finde alle deaktivierten Benutzerkonten.
  2. Finde alle Konten, deren Passwort abgelaufen ist (Search-ADAccount).
  3. Exportiere die deaktivierten Konten mit Name, SamAccountName und Enabled als C:\Kurs\Ausgabe\ad-deaktiviert.csv.
Lösung anzeigen
Terminal-Fenster
Get-ADUser -Filter 'Enabled -eq $false' | Select-Object Name, SamAccountName
Search-ADAccount -PasswordExpired | Select-Object Name, SamAccountName
Get-ADUser -Filter 'Enabled -eq $false' |
Select-Object Name, SamAccountName, Enabled |
Export-Csv C:\Kurs\Ausgabe\ad-deaktiviert.csv
3.3 · GruppenÜbung🚫 KI-frei lösen
  1. Zeige alle Gruppen, deren Name mit GRP- beginnt.
  2. Zeige die Mitglieder der Gruppe GRP-IT.
  3. In welchen Gruppen bist du selbst Mitglied?
  4. Welche Benutzer sind in keiner GRP--Gruppe? Das ist eine Challenge. Gehe schrittweise vor: Ermittle zuerst alle Mitglieder aller GRP--Gruppen in einer Variable.
Lösung anzeigen
Terminal-Fenster
Get-ADGroup -Filter "Name -like 'GRP-*'" | Select-Object Name, GroupScope
Get-ADGroupMember -Identity GRP-IT | Select-Object Name, SamAccountName
Get-ADPrincipalGroupMembership -Identity $env:USERNAME | Select-Object Name
# Challenge
$mitglieder = Get-ADGroup -Filter "Name -like 'GRP-*'" |
Get-ADGroupMember |
Select-Object -ExpandProperty SamAccountName -Unique
Get-ADUser -Filter * -SearchBase "OU=Benutzer,OU=Kurs,DC=pslab,DC=internal" |
Where-Object { $_.SamAccountName -notin $mitglieder } |
Select-Object Name, SamAccountName
3.4 · Benutzer anlegenÜbung🚫 KI-frei lösen

Lege in deiner OU (OU=TNN,OU=Uebung,OU=Kurs,DC=pslab,DC=internal) einen Benutzer an.

  1. Lege $ou mit dem Pfad deiner OU an.
  2. Frage ein Startpasswort mit Read-Host -AsSecureString ab. Das Lab-Passwortrichtlinie verlangt mindestens 12 Zeichen mit Groß- und Kleinbuchstaben, Zahl und Sonderzeichen.
  3. Lege mit New-ADUser den Benutzer max.mustermann.tNN an, zuerst mit -WhatIf.
  4. Prüfe, ob er existiert. Setze Department auf IT und füge ihn der Gruppe GRP-IT hinzu. (Hinweis: Dafür fehlt dir das Recht. Was meldet PowerShell? Warum ist das so gewollt?)
  5. Lösche den Benutzer wieder mit Remove-ADUser.
Lösung anzeigen
Terminal-Fenster
$ou = "OU=T01,OU=Uebung,OU=Kurs,DC=pslab,DC=internal" # deine Nummer einsetzen
$pw = Read-Host -AsSecureString -Prompt "Startpasswort"
New-ADUser -Name "Max Mustermann" -SamAccountName max.mustermann.t01 `
-Path $ou -AccountPassword $pw -Enabled $true -WhatIf
New-ADUser -Name "Max Mustermann" -SamAccountName max.mustermann.t01 `
-Path $ou -AccountPassword $pw -Enabled $true
Get-ADUser -Identity max.mustermann.t01
Set-ADUser -Identity max.mustermann.t01 -Department IT
Add-ADGroupMember -Identity GRP-IT -Members max.mustermann.t01 # Zugriff verweigert
Remove-ADUser -Identity max.mustermann.t01 -Confirm:$false

Set-ADUser funktioniert in deiner OU. Die Gruppe GRP-IT liegt außerhalb. Dort hast du nur Leserechte (Prinzip der minimalen Rechte).

3.5 · Benutzer aus CSV anlegenChallenge🚫 KI-frei lösen

Im Lab liegt C:\Kurs\Daten\Neue-Mitarbeiter.csv mit den Spalten Vorname, Nachname und Abteilung.

Lege für jede Zeile einen Benutzer in deiner OU an. Der SamAccountName soll vorname.nachname.tNN (alles klein) lauten. Teste zuerst mit -WhatIf. Lösche alle neuen Benutzer danach wieder.

Tipps: foreach, .ToLower(), Import-Csv, ein gemeinsames Startpasswort.

Lösung anzeigen
Terminal-Fenster
$ou = "OU=T01,OU=Uebung,OU=Kurs,DC=pslab,DC=internal"
$pw = Read-Host -AsSecureString -Prompt "Startpasswort"
foreach ($m in Import-Csv C:\Kurs\Daten\Neue-Mitarbeiter.csv) {
$sam = ("{0}.{1}.t01" -f $m.Vorname, $m.Nachname).ToLower()
New-ADUser -Name "$($m.Vorname) $($m.Nachname)" `
-GivenName $m.Vorname -Surname $m.Nachname `
-SamAccountName $sam -Department $m.Abteilung `
-Path $ou -AccountPassword $pw -Enabled $true -WhatIf
}
# Nach dem Test: -WhatIf entfernen und ausführen. Aufräumen:
Get-ADUser -Filter * -SearchBase $ou | Remove-ADUser -Confirm:$false

Umlaute im SamAccountName können Probleme machen. Die Lab-Datei enthält deshalb nur ASCII-Namen.

3.6 · Verbindung herstellenÜbung🚫 KI-frei lösen
  1. Prüfe mit Test-WSMan, ob PSLAB-02 erreichbar ist (wenn du PSLAB-02 bist, nimm PSLAB-03). Teste auch DC01.
  2. Öffne mit Enter-PSSession eine interaktive Sitzung auf dem Nachbarrechner. Lass dir den Rechnernamen (hostname) und den aktuellen Benutzer (whoami) ausgeben und beende die Sitzung.
  3. Führe von deinem Rechner aus mit Invoke-Command auf beiden anderen Kursrechnern den Befehl hostname aus.
Lösung anzeigen
Terminal-Fenster
Test-WSMan -ComputerName PSLAB-02
Test-WSMan -ComputerName DC01
Enter-PSSession -ComputerName PSLAB-02
hostname
whoami
Exit-PSSession
Invoke-Command -ComputerName PSLAB-02, PSLAB-03 -ScriptBlock { hostname }

Wenn du PSLAB-01 bist, sind die anderen beiden PSLAB-02 und PSLAB-03.

3.7 · Remote abfragenÜbung🚫 KI-frei lösen
  1. Zeige mit Invoke-Command den Status des Dienstes Spooler auf den anderen beiden Kursrechnern. Welche Spalte verrät dir, von welchem Rechner die Zeile stammt?
  2. Gib den Dienstnamen über eine Variable an, $dienst, und übergib sie mit $using:.
  3. Prüfe auf allen drei Rechnern (auch deinem eigenen), welche PowerShell-7-Version installiert ist ($PSVersionTable.PSVersion). Tipp: -ConfigurationName PowerShell.7.
  4. Liste die zehn größten Dateien in C:\Kurs\Daten auf PSLAB-02. Kommen die Ergebnisse als „echte” Dateiobjekte zurück? (Probiere Get-Member.)
Lösung anzeigen
Terminal-Fenster
Invoke-Command -ComputerName PSLAB-02, PSLAB-03 -ScriptBlock { Get-Service -Name Spooler } |
Select-Object PSComputerName, Name, Status
$dienst = 'Spooler'
Invoke-Command -ComputerName PSLAB-02 -ScriptBlock { Get-Service -Name $using:dienst }
Invoke-Command -ComputerName PSLAB-01, PSLAB-02, PSLAB-03 -ConfigurationName PowerShell.7 `
-ScriptBlock { $PSVersionTable.PSVersion.ToString() }
Invoke-Command -ComputerName PSLAB-02 -ScriptBlock {
Get-ChildItem C:\Kurs\Daten -Recurse -File | Sort-Object Length -Descending | Select-Object -First 10
} | Get-Member

Get-Member zeigt Deserialized.System.IO.FileInfo: Eigenschaften sind da, Methoden fehlen. Remote-Ergebnisse sind Kopien.

3.8 · Eine Sitzung wiederverwendenBonus
  1. Öffne mit New-PSSession eine Sitzung zu PSLAB-02.
  2. Setze darin eine Variable $x = 42 und lies sie in einem zweiten Invoke-Command wieder aus. Was passiert ohne -Session?
  3. Schließe die Sitzung ordentlich.
Lösung anzeigen
Terminal-Fenster
$s = New-PSSession -ComputerName PSLAB-02
Invoke-Command -Session $s -ScriptBlock { $x = 42 }
Invoke-Command -Session $s -ScriptBlock { $x } # 42
Invoke-Command -ComputerName PSLAB-02 -ScriptBlock { $x } # leer: neue Sitzung
Remove-PSSession $s
3.9 · Module erkunden und installierenÜbung🚫 KI-frei lösen
  1. Zeige alle Module an, die geladen sind, und alle, die installiert sind.
  2. Wie viele Cmdlets bringt das Modul ActiveDirectory mit?
  3. Suche in der PowerShell Gallery nach dem Modul ImportExcel (Find-PSResource oder Find-Module) und lies Version und Beschreibung.
  4. Installiere es für deinen Benutzer (ohne Adminrechte).
  5. Welche Cmdlets enthält es? Finde mit der Hilfe heraus, was Export-Excel kann, und exportiere Get-Service in eine Excel-Datei C:\Kurs\Ausgabe\dienste.xlsx.
  6. Entferne das Modul wieder aus der Sitzung.
Lösung anzeigen
Terminal-Fenster
Get-Module
Get-Module -ListAvailable
Get-Command -Module ActiveDirectory | Measure-Object
Find-PSResource -Name ImportExcel
Install-PSResource -Name ImportExcel -Scope CurrentUser -TrustRepository
Get-Command -Module ImportExcel
Get-Help Export-Excel -Examples
Get-Service | Export-Excel C:\Kurs\Ausgabe\dienste.xlsx
Remove-Module ImportExcel

Statt Install-PSResource funktioniert auch Install-Module -Scope CurrentUser.