Befehle

Start-Sleep

Das Cmdlet Start-Sleep pausiert die Ausführung eines Skripts oder einer Befehlssequenz für eine definierte Zeitspanne.

Es wird häufig verwendet, um:


🔧 Syntax

Start-Sleep [-Seconds] <Double> [<CommonParameters>]

Start-Sleep -Milliseconds <Int32> [<CommonParameters>]

📌 Parameter

-Seconds

Start-Sleep -Seconds 2.5

-Milliseconds

Start-Sleep -Milliseconds 500

⚠️ Hinweise zur Verwendung


📊 Verhalten

Eigenschaft Beschreibung
Blockierend Ja
Rückgabewert Keiner
Thread-Verhalten Aktueller Thread wird pausiert
Genauigkeit Abhängig vom System-Timer

🧪 Beispiele

Einfaches Warten

Write-Host "Start"
Start-Sleep -Seconds 2
Write-Host "Ende"

Verwendung in Schleifen

for ($i = 1; $i -le 5; $i++) {
    Write-Host "Durchlauf $i"
    Start-Sleep -Seconds 1
}

Kurze Pause in Millisekunden

Start-Sleep -Milliseconds 200

Dynamische Wartezeit

$delay = 1.5
Start-Sleep -Seconds $delay

⚙️ Typische Anwendungsfälle


❗ Alternativen / Ergänzungen

[System.Threading.Thread]::Sleep()

[System.Threading.Thread]::Sleep(1000)

Unterschiede:


Start-Sleep vs. Start-Job

Szenario Empfehlung
Einfaches Warten Start-Sleep
Asynchrone Ausführung Start-Job
UI-Responsiveness wichtig Kein Start-Sleep

🚫 Typische Fehler

1. Beide Parameter gleichzeitig verwenden

# ❌ Falsch
Start-Sleep -Seconds 1 -Milliseconds 500

2. UI einfrieren

# ❌ Problematisch in WinForms/WPF
Start-Sleep -Seconds 5

➡️ Blockiert die UI komplett


3. Zu kurze Wartezeiten erwarten hohe Präzision

Start-Sleep -Milliseconds 1

➡️ Systembedingt oft ungenau


🧠 Best Practices


Wenn du das Ding in einer WinForms-App benutzt, dann frierst du dir halt elegant dein UI ein und wunderst dich danach, warum alles tot wirkt. Klassischer Anfänger-Move, aber immerhin ein lehrreicher.

Join-Path

Das Cmdlet Join-Path kombiniert mehrere Pfadsegmente zu einem gültigen Dateisystempfad.

Es wird verwendet, um:


🔧 Syntax

    Join-Path [-Path] <String> [-ChildPath] <String> [[-AdditionalChildPath] <String[]>] [<CommonParameters>]

-Path

-ChildPath

    Join-Path -Path "C:\Temp" -ChildPath "Datei.txt"

-AdditionalChildPath

Verfügbar ab: PowerShell 6+

    Join-Path -Path "C:\Temp" -ChildPath "Logs" -AdditionalChildPath "2026","April"

⚠️ Hinweise zur Verwendung


📊 Verhalten

Eigenschaft Beschreibung
Plattformabhängigkeit Berücksichtigt das jeweilige Dateisystem
Rückgabewert String (zusammengesetzter Pfad)
Validierung Keine Existenzprüfung des Pfades
Separator-Handling Automatisch korrekt

🧪 Beispiele

Einfaches Zusammenfügen

Join-Path -Path "C:\Temp" -ChildPath "Datei.txt"

Ergebnis: C:\Temp\Datei.txt


Mehrere Segmente

Join-Path -Path "C:\Temp" -ChildPath "Logs" -AdditionalChildPath "2026","April"

Ergebnis: C:\Temp\Logs\2026\April


Mit Variablen

$base = "C:\Temp"
$file = "report.txt"

Join-Path -Path $base -ChildPath $file

Ergebnis: C:\Temp\report.txt


Provider-unabhängig (z. B. Registry)

Join-Path -Path "HKCU:\Software" -ChildPath "Microsoft"

⚙️ Typische Anwendungsfälle


❗ Alternativen / Ergänzungen

String-Konkatenation

# ❌ Fehleranfällig
"C:\Temp\" + "Datei.txt"

[System.IO.Path]::Combine()

[System.IO.Path]::Combine("C:\Temp", "Datei.txt")

Unterschiede:


🧠 Best Practices


Wenn du Pfade immer noch per String zusammenklebst, dann sabotierst du dich halt selbst mit Ansage. Funktioniert kurz, bricht später, und dann suchst du den Fehler wie ein Detektiv ohne Kaffee. Nimm einfach Join-Path und erspar dir das Drama.

Set-Alias

Das Cmdlet Set-Alias erstellt oder verändert einen Alias für ein Cmdlet, eine Funktion oder einen Befehl.

Ein Alias ist dabei einfach ein alternativer Kurzname für einen bestehenden Command.

Es wird häufig verwendet, um:


🔧 Syntax

Set-Alias [-Name] <String> [-Value] <String>
          [-Description <String>]
          [-Option <ScopedItemOptions>]
          [-PassThru]
          [-Scope <String>]
          [-Force]
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]

📌 Parameter

-Name

Set-Alias -Name ll -Value Get-ChildItem

-Value

Set-Alias -Name edit -Value notepad

-Description

Set-Alias -Name gs -Value Get-Service -Description "Listet Dienste auf"

-Option

Mögliche Optionen:

Option Bedeutung
None Keine besondere Einschränkung
ReadOnly Alias kann nur mit -Force geändert werden
Constant Alias kann gar nicht mehr geändert werden
Private Nur im aktuellen Scope sichtbar
Set-Alias -Name test -Value Get-Date -Option ReadOnly

-PassThru

Set-Alias -Name now -Value Get-Date -PassThru

-Scope

Beispiele:

Scope Bedeutung
Local Nur aktueller Scope
Global Überall verfügbar
Script Nur innerhalb des Skripts
Set-Alias -Name ll -Value Get-ChildItem -Scope Global

-Force

Set-Alias -Name ls -Value Get-Process -Force

⚠️ Hinweise zur Verwendung


📊 Verhalten

Eigenschaft Beschreibung
Rückgabewert Standardmäßig keiner
Überschreibbar Ja, außer Constant
Persistenz Nur aktuelle Sitzung
Unterstützt Funktionen Ja
Unterstützt EXE-Dateien Ja

🧪 Beispiele

Einfachen Alias erstellen

Set-Alias -Name ll -Value Get-ChildItem

Jetzt funktioniert:

ll

Alias für Programme

Set-Alias -Name np -Value notepad

Bestehenden Alias überschreiben

Set-Alias -Name ls -Value Get-Process -Force

Jetzt startet ls plötzlich Prozesse statt Dateien aufzulisten.
Ein hervorragender Weg, sich selbst drei Stunden später maximal zu verwirren.


Alias dauerhaft speichern

Add-Content -Path $PROFILE -Value 'Set-Alias -Name ll -Value Get-ChildItem'

Alias anzeigen

Get-Alias ll

⚙️ Typische Anwendungsfälle


❗ Alternativen / Ergänzungen

New-Alias

New-Alias -Name ll -Value Get-ChildItem

Unterschied zu Set-Alias:

Cmdlet Verhalten
New-Alias Erstellt nur neue Aliase
Set-Alias Erstellt oder überschreibt

Funktionen statt Alias

function ll {
    Get-ChildItem -Force
}

Vorteil:


🚫 Typische Fehler

1. Denken, dass Aliase Parameter speichern

# ❌ Funktioniert NICHT wie erwartet
Set-Alias -Name ll -Value "Get-ChildItem -Force"

Ein Alias verweist nur auf einen Commandnamen.
Nicht auf eine komplette Befehlszeile.

➡️ Dafür nutzt man Funktionen.


2. Alias nach Neustart weg

Set-Alias -Name test -Value Get-Date

Nach neuer PowerShell-Sitzung verschwunden.

➡️ Alias ins $PROFILE schreiben.


3. Wichtige Standard-Aliase überschreiben

Set-Alias -Name cd -Value Get-Date

Technisch möglich.
Psychologisch fragwürdig.


🧠 Best Practices