Tag 1 · Block 3: Profil, Sicherheit und Tagesabschluss
- Zeige den Pfad deines PowerShell-Profils an (
$PROFILE). Gehört es zu PowerShell 7 oder zu Windows PowerShell 5.1? - Prüfe mit
Test-Path, ob die Datei existiert, und lege sie bei Bedarf mitNew-Item -Forcean. - Öffne sie in VS Code (
code $PROFILE) und füge ein: den AliasllfürGet-ChildItemund eine Begrüßung mit deinem Benutzernamen. - Starte eine neue PowerShell. Begrüßt sie dich? Funktioniert
ll?
Lösung anzeigen
$PROFILETest-Path $PROFILENew-Item -ItemType File -Path $PROFILE -Forcecode $PROFILEInhalt der Profildatei:
Set-Alias ll Get-ChildItemWrite-Output "Willkommen, $env:USERNAME!"Das Profil von PowerShell 7 liegt in …\Documents\PowerShell\, das von Windows PowerShell 5.1 in …\Documents\WindowsPowerShell\.
- Welche Execution Policy gilt in deiner Sitzung? Lass dir alle Scopes anzeigen.
- Lege eine Datei
C:\Kurs\Skripte\hallo.ps1mit dem InhaltWrite-Output "Hallo aus dem Skript"an und führe sie aus (C:\Kurs\Skripte\hallo.ps1). - Setze die Policy für den aktuellen Prozess auf
Restricted, falls dein System das zulässt, und führe das Skript erneut aus. Was passiert? (Wenn ein Gruppenrichtlinien-Scope die Änderung übersteuert, ist das eine Beobachtung wert.) - Beende die PowerShell und starte neu. Welche Policy gilt wieder?
Lösung anzeigen
Get-ExecutionPolicyGet-ExecutionPolicy -List
Set-Content -Path C:\Kurs\Skripte\hallo.ps1 -Value 'Write-Output "Hallo aus dem Skript"'C:\Kurs\Skripte\hallo.ps1
Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope ProcessC:\Kurs\Skripte\hallo.ps1 # Fehlermeldung: Skriptausführung ist deaktiviertDer Scope Process gilt nur für die laufende Sitzung. Nach dem Neustart ist die vorherige Einstellung wieder aktiv. Auf Windows Server ist der Standard RemoteSigned, auf Clients Restricted.
Baue Schritt für Schritt ein kleines Inventar deines Rechners, ausschließlich mit Dingen, die du bis hierher gelernt hast.
- Lege ein Objekt
$inventaran ([PSCustomObject]) mit diesen Eigenschaften:Computer(Name des Rechners),Benutzer,PowerShellVersion,FreierSpeicherGB(Laufwerk C:, gerundet auf eine Nachkommastelle) undLaufendeDienste(Anzahl der Dienste mit StatusRunning). - Gib das Objekt mit
Format-Listaus. - Speichere es als CSV in
C:\Kurs\Ausgabe\inventar.csvund lies die Datei mitImport-Csvwieder ein.
Lösung anzeigen
$frei = [math]::Round((Get-PSDrive -Name C).Free / 1GB, 1)$dienste = (Get-Service | Where-Object Status -eq 'Running' | Measure-Object).Count
$inventar = [PSCustomObject]@{ Computer = $env:COMPUTERNAME Benutzer = $env:USERNAME PowerShellVersion = $PSVersionTable.PSVersion.ToString() FreierSpeicherGB = $frei LaufendeDienste = $dienste}
$inventar | Format-List$inventar | Export-Csv C:\Kurs\Ausgabe\inventar.csvImport-Csv C:\Kurs\Ausgabe\inventar.csvMehrere Teilschritte lassen sich in Variablen zwischenspeichern. So bleibt jede Zeile lesbar und testbar.