Skip to content

Latest commit

 

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PowerShell für Dateiverwaltung: Ein umfassender Leitfaden

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.

Ziele, Einsatzszenarien & Mindset

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.

Überblick: Warum PowerShell besser ist als GUI/Batch

  • 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.

Grundlagen: PowerShell-Objektmodell

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.

Pfad- & Provider-Konzept

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.

Cmdlet-Basics fürs Dateisystem

  • 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.

Filtern, Sortieren, Selektieren

Berechnete Properties: Select-Object Name, @{Name="SizeMB"; Expression={$_.Length / 1MB}} für benutzerdefinierte Spalten. Effizient: Filter früh in der Pipeline.

Rekursion & Pattern-Suche

  • -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.

Dateiattribute, Metadaten & Zeitstempel

  • 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-Acl für Berechtigungen.

Fallen: Copy-Item behält Zeitstempel, Move-Item kann sie ändern – teste immer.

Größenanalysen & Storage-Reports

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.

Inhaltsbasierte Suche

Select-String durchsucht Textdateien (z.B. Select-String -Path *.log -Pattern "ERROR"). Encoding: -Encoding UTF8. Performance: Begrenze mit -First oder filtere Dateien vorab.

Kopieren, Verschieben, Spiegeln

  • 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 -Force oder Versionierung).
  • Idempotent: Skripte sollten mehrmals laufen können ohne Schaden.

Robocopy gezielt aus PowerShell steuern

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.

Hashing & Integritätsprüfungen

Get-FileHash berechnet Hashes (z.B. Get-FileHash -Algorithm SHA256 $file). Vergleiche Quell/Ziel: $hash1 -eq $hash2. Praxis: Vor/Nach Backup-Checks.

Duplikate & Datenhygiene

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.

Berechtigungen & Ownership

Get-Acl liest ACLs, Set-Acl setzt sie. Vererbung: $acl.SetAccessRuleProtection($true, $false). Unternehmensfälle: Bulk-Änderungen für Shares. Sicher: Teste mit WhatIf.

Fehlerbehandlung & Logging

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.

Dry-Run, WhatIf & sichere Deploy-Patterns

-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.

Performance für große Datenmengen

  • Filter früh: -Filter statt Where-Object.
  • Pipeline-Optimierung: Vermeide ForEach-Object für große Listen.
  • Parallel: ForEach-Object -Parallel (PS 7+).
  • I/O-Fallen: Buffer große Reads, vermeide unnötige Zugriffe.

Packaging: Funktionen, Module, Skript-Design

Funktionen: function Get-FolderSize { param($path) ... }. Module: Sammle in .psm1. Parameter: [Parameter(Mandatory)] für Validierung. Hilfe: Comment-Based Help. Versionierung: Git-Tags.

Praxis-Labs / End-to-End Projekte

a) Ordner-Sync mit Konfliktregeln

Skript: Vergleiche Quell/Ziel, sync mit Regeln (z.B. neuer überschreibt). Beispiel: Sync-Folders.ps1 im Repo.

b) SharePoint-Backup-Analyse

Audit: Scanne Backups auf Vollständigkeit/Integrität. Beispiel: BackupAndManageVersions.ps1.

c) Storage-Cleanup mit Report & Freigabeprozess

Cleanup: Finde alte/große Dateien, erstelle Report, warte auf Approval. Beispiel: DetectAndManageDuplicateFiles.ps1.


Script-Katalog — schnelle Übersicht

Hier findest du eine strukturierte Liste der im Repository enthaltenen PowerShell-Skripte mit kurzer Beschreibung und direktem Link zur ausführlichen Dokumentation (jeweils .md).

Utilities & Backups

  • 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.

Archiv / Entpacken (7-Zip / RAR)

  • 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]").

Organisation & Strukturmanagement

  • 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.

Reporting, Hygiene & Cleanup


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.

Best Practices & Checklisten

  • 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.

About

Powershell Scripts for FileOperations

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages