# Join-Path

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

Es wird verwendet, um:

- Pfade plattformunabhängig zusammenzusetzen
- manuelles Hantieren mit Trennzeichen (`\` oder `/`) zu vermeiden
- Fehler durch doppelte oder fehlende Separatoren zu verhindern

---

## 🔧 Syntax

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


#### `-Path`

- **Typ:** `String`
- **Pflicht:** Ja
- Basispfad (z. B. Verzeichnis)

#### `-ChildPath`

- **Typ:** `String`
- **Pflicht:** Ja
- Pfadsegment, das an `-Path` angehängt wird

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


#### `-AdditionalChildPath`

<p class="callout info">*Verfügbar ab: **PowerShell 6+***</p>

- **Typ:** `String[]`
- **Pflicht:** Nein
- Weitere Pfadsegmente, die nacheinander angehängt werden

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


---

## ⚠️ Hinweise zur Verwendung

- Trennzeichen werden automatisch korrekt gesetzt (kein manuelles `\` nötig)
- Funktioniert providerübergreifend (z. B. Registry, Zertifikate)
- Mehrere Segmente werden sauber zusammengeführt
- Bestehende Trennzeichen im Input werden berücksichtigt (keine doppelten `\\`)

---

## 📊 Verhalten

<table id="bkmrk-eigenschaft-beschrei"><thead><tr><th>Eigenschaft</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Plattformabhängigkeit</td><td>Berücksichtigt das jeweilige Dateisystem</td></tr><tr><td>Rückgabewert</td><td>`String` (zusammengesetzter Pfad)</td></tr><tr><td>Validierung</td><td>Keine Existenzprüfung des Pfades</td></tr><tr><td>Separator-Handling</td><td>Automatisch korrekt</td></tr></tbody></table>

---

## 🧪 Beispiele

### Einfaches Zusammenfügen

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

Ergebnis: `C:\Temp\Datei.txt`

---

### Mehrere Segmente

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

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

---

### Mit Variablen

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

Join-Path -Path $base -ChildPath $file
```

Ergebnis: `C:\Temp\report.txt`

---

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

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

---

## ⚙️ Typische Anwendungsfälle

- Dynamische Dateipfade erstellen
- Arbeiten mit temporären Verzeichnissen
- Plattformunabhängige Skripte schreiben
- Zusammenbau von Registry-Pfaden

---

## ❗ Alternativen / Ergänzungen

### `String`-Konkatenation

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

- Fehleranfällig bei fehlenden oder doppelten Trennzeichen
- Nicht plattformunabhängig

---

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

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

**Unterschiede:**

- .NET-Methode, nicht PowerShell-spezifisch
- Keine Provider-Unterstützung (nur Dateisystem)
- Kein Support für `CommonParameters`

---

## 🧠 Best Practices

- Immer `Join-Path` statt String-Konkatenation verwenden
- Ab PowerShell 6 kann für mehrere Segmente `-AdditionalChildPath` verwendet werden.
- Kombination mit `Test-Path` für Existenzprüfung
- Variablen statt Hardcoding verwenden

---

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.