Tag 3 · Block 1: Funktionen, Skripte und Module
Arbeite ab jetzt in VS Code und speichere deine Skripte in C:\Kurs\Skripte. Führe sie mit F5 oder in der Konsole aus.
- Schreibe eine Funktion
Show-Hallo, die „Hallo, PowerShell!” ausgibt. Rufe sie auf. - Gib ihr einen Parameter
-Name(Text). Die Ausgabe lautet dann „Hallo, Anna!“. - Mache
-Nameverpflichtend (Mandatory). Was passiert, wenn du ihn weglässt? - Gib
-Nameden Standardwert"Welt"und mache ihn dafür optional.
Lösung anzeigen
function Show-Hallo { "Hallo, PowerShell!"}Show-Hallo
function Show-Hallo { param([string]$Name) "Hallo, $Name!"}Show-Hallo -Name "Anna"
function Show-Hallo { param([Parameter(Mandatory = $true)][string]$Name) "Hallo, $Name!"}Show-Hallo # PowerShell fragt nach dem Wert
function Show-Hallo { param([string]$Name = "Welt") "Hallo, $Name!"}Show-HalloSchreibe Get-Begruessung mit den Parametern -Name (Pflicht) und -Sprache. Für -Sprache sind nur DE, EN und FR erlaubt (ValidateSet). Die Funktion gibt „Hallo, NAME!“, „Hello, NAME!” oder „Bonjour, NAME!” aus. Teste auch einen ungültigen Wert und beobachte die Fehlermeldung.
Lösung anzeigen
function Get-Begruessung { param( [Parameter(Mandatory = $true)] [string]$Name,
[ValidateSet("DE", "EN", "FR")] [string]$Sprache = "DE" ) switch ($Sprache) { "DE" { "Hallo, $Name!" } "EN" { "Hello, $Name!" } "FR" { "Bonjour, $Name!" } }}Get-Begruessung -Name "Max" -Sprache ENGet-Begruessung -Name "Max" -Sprache IT # Fehler: Wert nicht erlaubtMit ValidateSet erhältst du außerdem Tab-Vervollständigung für -Sprache.
Schreibe eine Funktion Get-FreierSpeicher mit dem Parameter -Laufwerk (Standard C). Sie soll ein Objekt mit den Eigenschaften Laufwerk, FreiGB und GesamtGB zurückgeben (gerundet auf eine Nachkommastelle).
Tipp: Get-PSDrive -Name $Laufwerk liefert Used und Free.
Lösung anzeigen
function Get-FreierSpeicher { param([string]$Laufwerk = "C")
$d = Get-PSDrive -Name $Laufwerk [PSCustomObject]@{ Laufwerk = $Laufwerk FreiGB = [math]::Round($d.Free / 1GB, 1) GesamtGB = [math]::Round(($d.Used + $d.Free) / 1GB, 1) }}Get-FreierSpeicherGet-FreierSpeicher -Laufwerk C | Format-TableDie Funktion gibt ein Objekt zurück, keine formatierte Zeichenkette. So kann der Aufrufer weiterfiltern, exportieren oder anzeigen.
Mache aus der Challenge „Dienste mit Starttyp Automatisch, die nicht laufen” von Tag 2 ein Skript C:\Kurs\Skripte\Get-DienstReport.ps1.
- Das Skript hat einen Kommentarkopf (Zweck, Autor, Beispiel) und einen Parameter
-Pfadfür die Ausgabedatei (StandardC:\Kurs\Ausgabe\ServiceReport.csv). - Es schreibt den Bericht mit Datum als CSV und gibt am Ende eine Meldung mit der Anzahl der gefundenen Dienste aus.
- Prüfe mit
Get-Help C:\Kurs\Skripte\Get-DienstReport.ps1, ob dein Kommentarkopf als Hilfe erscheint.
Lösung anzeigen
<#.SYNOPSIS Berichtet automatisch startende Dienste, die nicht laufen..PARAMETER Pfad Ausgabedatei (CSV)..EXAMPLE .\Get-DienstReport.ps1 -Pfad C:\Kurs\Ausgabe\bericht.csv#>param( [string]$Pfad = "C:\Kurs\Ausgabe\ServiceReport.csv")
$gefunden = Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } | Select-Object Name, DisplayName, Status, @{ Name = 'Datum'; Expression = { Get-Date -Format 'yyyy-MM-dd' } }
$gefunden | Export-Csv -Path $PfadWrite-Output "$(@($gefunden).Count) Dienst(e) gefunden. Bericht: $Pfad"@(…) stellt sicher, dass auch bei genau einem oder keinem Treffer .Count funktioniert.
- Lege
C:\Kurs\Skripte\KursToolsan und darinKursTools.psm1mit deinen FunktionenShow-HalloundGet-FreierSpeicher. - Erstelle ein Manifest mit
New-ModuleManifest(-RootModulenicht vergessen). - Lade das Modul mit
Import-Module, rufe beide Funktionen auf und prüfe mitGet-Command -Module KursTools.
Lösung anzeigen
New-Item -ItemType Directory -Path C:\Kurs\Skripte\KursTools -Force
@'function Show-Hallo { param([string]$Name = "Welt") "Hallo, $Name!"}
function Get-FreierSpeicher { param([string]$Laufwerk = "C") $d = Get-PSDrive -Name $Laufwerk [PSCustomObject]@{ Laufwerk = $Laufwerk FreiGB = [math]::Round($d.Free / 1GB, 1) }}
Export-ModuleMember -Function Show-Hallo, Get-FreierSpeicher'@ | Set-Content C:\Kurs\Skripte\KursTools\KursTools.psm1
New-ModuleManifest -Path C:\Kurs\Skripte\KursTools\KursTools.psd1 ` -RootModule KursTools.psm1 -ModuleVersion 1.0.0 -Author "Ich" ` -FunctionsToExport Show-Hallo, Get-FreierSpeicher
Import-Module C:\Kurs\Skripte\KursTools -ForceGet-Command -Module KursToolsShow-Hallo -Name "Modul"Get-FreierSpeicher