Dieses Repository enthält PowerShell-Skripte zur effizienten Dateiverwaltung. Der Leitfaden erklärt, warum PowerShell für File-Operations überlegen ist und bietet praktische Patterns für Automatisierung.
PowerShell revolutioniert die Dateiverwaltung durch Automatisierung, Skalierbarkeit und Präzision. Anstatt manuelle GUI-Klicks oder fragile Batch-Skripte zu verwenden, ermöglicht PowerShell objektbasiertes Denken für robuste, wiederverwendbare Lösungen. Typische Einsatzszenarien umfassen Cleanup von alten Dateien, Migrationen zwischen Speichern, Synchronisation von Ordnern und Audits für Compliance.
- Objektorientiert: Alles ist ein Objekt mit Eigenschaften und Methoden – kein Text-Parsing wie in Batch.
- Pipeline-Power: Ketten von Befehlen ohne temporäre Dateien.
- Sicherheit: WhatIf, Confirm und Fehlerbehandlung verhindern Datenverlust.
- Skalierbarkeit: Handhabt Millionen Dateien effizient.
- Integration: Nahtlos mit .NET, APIs und anderen Tools kombinierbar.
Typische Use-Cases: Automatisches Löschen von Temp-Dateien, Backup-Migrationen, Sync von Netzlaufwerken, Audit-Reports für Storage-Nutzung.
In PowerShell sind Cmdlets wie Get-ChildItem geben Objekte zurück (z.B. FileInfo oder DirectoryInfo), nicht Text. Pipelines übergeben diese Objekte direkt – z.B. Get-ChildItem | Where-Object { $_.Length -gt 1MB } | Sort-Object Length -Descending`. Dies macht Skripte eleganter, sicherer und leichter debuggbar als textbasierte Ansätze.
PowerShell verwendet Provider für verschiedene "Dateisysteme": FileSystem für lokale/NAS-Pfade, Registry, Certificate usw. Pfade können absolut (C:\Folder), relativ (.\\Subfolder), UNC (\\Server\Share) oder PSDrives (New-PSDrive -Name Z -PSProvider FileSystem -Root \Server\Share`). Mehrere Laufwerke/Netzpfade lassen sich parallel verwalten, z.B. für Cross-Storage-Migrationen.
Get-ChildItem: Listet Dateien/Ordner (Alias:dir,ls).Get-Item: Holt ein spezifisches Item (z.B. für Metadaten).Set-Item: Ändert Eigenschaften (selten für Dateien).New-Item: Erstellt Dateien/Ordner (z.B.New-Item-ItemType Directory -Path C:\NewFolder`).Remove-Item: Löscht Items (Alias:del,rm).
Patterns: Get-ChildItem -Path C:\ -Filter *.log -Recurse für effiziente Suche.
Where-Object: Filtert Objekte (z.B.Where-Object{ $_.LastWriteTime -lt (Get-Date).AddDays(-30) }für alte Dateien).Sort-Object: Sortiert (z.B.Sort-ObjectLength -Descendingfür größte Dateien).Select-Object: Wählt Properties (z.B.Select-ObjectName, Length, LastWriteTime).
Berechnete Properties: Select-Object Name, @{Name="SizeMB"; Expression={$_.Length / 1MB}} für benutzerdefinierte Spalten. Effizient: Filter früh in der Pipeline.
-Recurse: Durchsucht Unterordner tief.-Filter: Schnellfilter im Provider (z.B.-Filter *.txt).-Include/-Exclude: Regex-ähnliche Patterns (z.B.-Include "2023-*" -Exclude "*temp*").- Wildcards:
*für beliebig,?für einzeln. - Regex: Mit
Where-Object{ $_.Name -match "^\d{4}" }für komplexe Muster.
Für große Strukturen: Kombiniere -Filter mit -Recurse für Performance.
LastWriteTime,CreationTime,LastAccessTime: Zeitstempel (z.B.Set-ItemProperty-Path $file -Name LastWriteTime -Value (Get-Date)).Attributes: Hidden, ReadOnly, etc. (z.B.$file.Attributes -band [System.IO.FileAttributes]::Hidden).- ACLs:
Get-Aclfür Berechtigungen.
Fallen: Copy-Item behält Zeitstempel, Move-Item kann sie ändern – teste immer.
Aggregiere Größen: Get-ChildItem -Recurse | Measure-Object -Property Length -Sum für Ordnergröße. Top-N: Get-ChildItem | Sort-Object Length -Descending | Select-Object -First 10. Export: | Export-Csv -Path Report.csv für Excel-Analysen.
Select-String durchsucht Textdateien (z.B. Select-String -Path *.log -Pattern "ERROR"). Encoding: -Encoding UTF8. Performance: Begrenze mit -First oder filtere Dateien vorab.
Copy-Item: Kopiert (z.B.Copy-Item-Path $source -Destination $dest -Recurse).Move-Item: Verschiebt (Alias:mv).- Robuste Patterns: Überprüfe Existenz, handle Konflikte (z.B. mit
-Forceoder Versionierung). - Idempotent: Skripte sollten mehrmals laufen können ohne Schaden.
Robocopy ist ideal für große Transfers mit Retry-Logik. Aus PowerShell: Start-Process robocopy -ArgumentList $source, $dest, "/MIR /LOG:$logfile" -Wait. Schalter: /MIR für Spiegel, /L für Dry-Run. Integriere Logs in PowerShell-Reports.
Get-FileHash berechnet Hashes (z.B. Get-FileHash -Algorithm SHA256 $file). Vergleiche Quell/Ziel: $hash1 -eq $hash2. Praxis: Vor/Nach Backup-Checks.
Strategien: Gruppiere nach Größe/Hash/Name (z.B. Group-Object Length | Where-Object Count -gt 1). Sichere Löschung: In Quarantäne verschieben statt direkt löschen. Workflow: Report erstellen, manuell prüfen, dann löschen.
Get-Acl liest ACLs, Set-Acl setzt sie. Vererbung: $acl.SetAccessRuleProtection($true, $false). Unternehmensfälle: Bulk-Änderungen für Shares. Sicher: Teste mit WhatIf.
try { ... } catch { Write-Error $_.Exception.Message }. -ErrorAction Stop für strenge Behandlung. Logging: Write-Host oder Out-File für Trails. Audit: Zeitstempel und User-Info loggen.
-WhatIf simuliert (z.B. Remove-Item -Path $file -WhatIf). Staging: Teste auf Dev-System. Pattern: "Berichte erstellen, dann handeln" – z.B. CSV-Report vor Löschung.
- Filter früh:
-FilterstattWhere-Object. - Pipeline-Optimierung: Vermeide
ForEach-Objectfür große Listen. - Parallel:
ForEach-Object-Parallel(PS 7+). - I/O-Fallen: Buffer große Reads, vermeide unnötige Zugriffe.
Funktionen: function Get-FolderSize { param($path) ... }. Module: Sammle in .psm1. Parameter: [Parameter(Mandatory)] für Validierung. Hilfe: Comment-Based Help. Versionierung: Git-Tags.
Skript: Vergleiche Quell/Ziel, sync mit Regeln (z.B. neuer überschreibt). Beispiel: Sync-Folders.ps1 im Repo.
Audit: Scanne Backups auf Vollständigkeit/Integrität. Beispiel: BackupAndManageVersions.ps1.
Cleanup: Finde alte/große Dateien, erstelle Report, warte auf Approval. Beispiel: DetectAndManageDuplicateFiles.ps1.
Hier findest du eine strukturierte Liste der im Repository enthaltenen PowerShell-Skripte mit kurzer Beschreibung und direktem Link zur ausführlichen Dokumentation (jeweils .md).
- BackupAndManageVersions.ps1 — Automatisches Erstellen zeitgestempelter ZIP-Backups pro Unterordner; alte Versionen werden verwaltet (keepVersions).
- Create-SFVFile.ps1 — Erzeugt checksums.sfv (CRC32) für ein Verzeichnis zur späteren Integritätsprüfung.
- ComprehensiveFileManagementWith7Zip.ps1 — Großes Verwaltungs-Toolkit, viele Fälle: Durchlauf, RAR-Erkennung und Entpacken mit 7-Zip, Verschiebe- und Prüf-Logik (Demo-Modus vorhanden).
- extract_rar.ps1 — Fokussiertes Tool zum Erkennen und Entpacken mehrteiliger RAR-Archive; verifiziert Ergebnis per Größenvergleich und bietet optionales Löschen der Archive.
- RenameFolderIfRarFiles.ps1 — Kleinwerkzeug: Verzeichnisse kennzeichnen, die RAR-Dateien enthalten (z. B. mit "[uv]").
- DistributeFilesIntoFolders.ps1 — Verteilt große Dateimengen in nummerierte Unterordner (z.B. 0001, 0002) und entfernt ungültige Zeichen aus Dateinamen.
- OrganizeFoldersByRegex.ps1 — Ordnet Ordner anhand eines Regex-Musters in Zielordner (z.B. Jahreszahlen → "+ 2024").
- MoveFoldersByRegex.ps1 — Verschiebt Verzeichnisse selektiv zwischen Quell- und Zielpfad, zeigt Fortschritt, transfer rates und handhabt Namenskonflikte.
- DetectAndManageDuplicateFiles.ps1 — Findet Dateien mit gleicher DateiName‑Häufigkeit, erstellt Report und bietet optionales sicheres Löschen.
Hinweis: Jede verlinkte Datei enthält ausführliche Parameter-, Beispiel- und Anwendungsbeschreibungen. Viele Skripte unterstützen einen Demo- oder WhatIf-Modus — teste zuerst immer in einer sicheren Umgebung.
- Sicherheit: Keine harten Pfade, valide Inputs, WhatIf standard.
- Qualität: Teste auf kleinen Datenmengen, logge alles.
- Fehler: "Datei in Verwendung" – retry mit Delay; "Zugriff verweigert" – elevate.
- Vorlagen: Beginne mit Template-Skripten aus diesem Repo.
Für detaillierte Skript-Beispiele siehe die .ps1-Dateien und ihre .md-Dokumentationen.