MKdir für alle ordner auf allen Festplatten erzeugen

# Pfad für die Ausgabedatei
# WARNUNG: Diese Datei kann SEHR groß werden! Stellen Sie sicher, dass genug Speicherplatz vorhanden ist.
# Sie können diesen Pfad bei Bedarf anpassen (z.B. "D:\MeinDateibaum\Komplett.txt")
$AusgabeDatei = "C:\Temp\Dateibaum_Komplett.txt"

# Sicherstellen, dass der übergeordnete Ordner für die Ausgabedatei existiert
$AusgabeOrdner = Split-Path -Parent $AusgabeDatei
if (-not (Test-Path $AusgabeOrdner)) {
    Write-Host "Erstelle Ordner für Ausgabedatei: $AusgabeOrdner"
    # Use -Force just in case the parent path structure doesn't fully exist
    New-Item -Path $AusgabeOrdner -ItemType Directory -Force | Out-Null
}

# Datei leeren, falls sie bereits existiert, oder neu erstellen
Write-Host "Leere oder erstelle Ausgabedatei: $AusgabeDatei"
Out-File -Path $AusgabeDatei -Force -Encoding UTF8 | Out-Null

# Alle Dateisystem-Laufwerke abrufen (z.B. C:, D:, etc.)
# Filtert typischerweise Netzwerk- oder System-Laufwerke ohne Root-Pfad heraus
$Laufwerke = Get-PSDrive -PSProvider FileSystem | Where-Object {$_.Root -like '*:\'}

Write-Host "Beginne mit dem Scannen der Laufwerke. Das kann SEHR lange dauern (Stunden bei vielen Dateien!)..."
Write-Host "Fortschritt wird nicht detailliert angezeigt, nur pro Laufwerk."
Write-Host "Fehlermeldungen bei fehlenden Berechtigungen (z.B. auf Systemordner) sind normal und werden ignoriert."

# Für jedes Laufwerk den Dateibaum abrufen und in die Datei schreiben
foreach ($laufwerk in $Laufwerke) {
    $laufwerkRoot = "$($laufwerk.Root)" # z.B. "C:\"

    Write-Host "  Scanne Laufwerk: $laufwerkRoot ..."

    # Get-ChildItem ruft alle Ordner und Dateien rekursiv ab (-Recurse)
    # -ErrorAction SilentlyContinue ignoriert Zugriffsfehler auf Systemordnern, für die der aktuelle Benutzer keine Berechtigung hat
    # Select-Object FullName wählt nur den vollständigen Pfad des Elements aus
    # Out-File -Append schreibt das Ergebnis zeilenweise an das Ende der Ausgabedatei
    # -Encoding UTF8 stellt sicher, dass Sonderzeichen korrekt dargestellt werden
    try {
        Get-ChildItem -Path $laufwerkRoot -Recurse -ErrorAction SilentlyContinue |
            Select-Object FullName |
            Out-File -Path $AusgabeDatei -Append -Encoding UTF8
        Write-Host "  Scannen von Laufwerk $laufwerkRoot abgeschlossen."
    }
    catch {
        Write-Host "  FEHLER beim Scannen von Laufwerk $laufwerkRoot: $($_.Exception.Message)" -ForegroundColor Red
    }
}

Write-Host "Scannen aller ausgewählten Laufwerke abgeschlossen."
Write-Host "Der vollständige Dateibaum wurde in die Datei ""$AusgabeDatei"" geschrieben."
Write-Host ""
Write-Host "Öffnen Sie diese Datei (z.B. mit Notepad++ oder VS Code) um Ihren Dateibaum zu sichten."
Write-Host "Bereiten Sie sich darauf vor, dass die Datei sehr groß sein kann!"