PowerShell-Tutorial

Datei-Management im Griff mit unseren Profi-Tipps

Sie wünschen sich eine Liste Ihrer Musik-Dateien, möchten Speicherplatz-Verschwender auf der Festplatte finden oder regelmäßige Sicherheitskopien auf einem USB-Stick speichern? Willkommen in der Automationswelt von PowerShell und unserem Tutorial!

Wir zeigen, wie Sie mit PowerShell Ihre Dateien in den Griff bekommen.

© Hersteller / Archiv

Wir zeigen, wie Sie mit PowerShell Ihre Dateien in den Griff bekommen.

Wir verraten in diesem Tutorial, wie Sie mit PowerShell Dateien automatisiert organisieren lassen können.

Mission 1: Dateien und Ordner finden

PowerShell-Befehle (Cmdlets) sind hochspezialisierte Experten genau für eine Aufgabe. Gibt es bereits das passende Cmdlet für eine Aufgabe, dann versorgen Sie das Cmdlet bloß mit den nötigen Informationen, und schon ist das Problem gelöst.

Das wichtigste Dateisystem-Cmdlet heißt Get- ChildItem und steht auch unter den historischen Aliasnamen dir und ls zur Verfügung: zuständig ist es für die Datei- und Ordnersuche. Um beispielsweise alle Word-Dokumente zu finden, genügt dieser Aufruf:

Get-ChildItem -Path $env:USERPROFILE -Filter*.doc? -Recurse

Den Startpunkt der Suche legt der Parameter -Path fest, dem Sie einen Pfadnamen nennen. Wichtige Systempfade finden sich praktischerweise in den Umgebungsvariablen und müssen nicht wörtlich angegeben werden. Suchen Sie nach persönlichen Daten, ist das Benutzerprofil der richtige Ausgangspunkt:

PS> $env:USERPROFILEC:\Users\Tobias

Mit Get-ChildItem -Path env: listen Sie übrigens alle weiteren Umgebungsvariablen auf, die es sonst noch gibt. Dank -Recurse erfasst Get-ChildItem auch alle untergeordneten Order. Möchten Sie versteckte Ordner und Dateien einschließen, gibt man zusätzlich -Force an.

Gesucht wird nach allen Dateien, die auf .doc plus optional einem weiteren Zeichen enden, sodass auch Dateien mit der Endung *.docx gefunden werden. "*" steht für beliebig viele Zeichen, "?" für genau eibeliebiges Zeichen. Mehr Informationen zu Platzhalterzeichenliefert PowerShell mit help wildcard ([Eingabe]): Das gilt jedenfalls dann, wenn die Hilfeheruntergeladen wurde (Kasten PowerShell-Hilfe installieren). Die Suche funktioniert überall, doch liefert sie mitunter auch rote Fehlermeldungen. Diese Zeile findet beispielsweise alle Logbuch-Dateien im Windows-Ordner:

# Logbuch-Dateien im Windows-Ordner auflistenGet-ChildItem -Path $env:windir -Recurse-Filter *.log

Die Ergebnisliste ist durchsetzt mit Fehlermeldungen, weil PowerShell nicht in alle Unterordner des Systems hineinschauen darf. Um Fehlermeldungen zu unterdrücken, unterstützt jedes Cmdlet den Parameter-ErrorAction, der bestimmt, was im Fehlerfall zu tun ist. Mit der folgenden Zeile sind Fehlermeldungen verschwunden:

# Logbuch-Dateien im Windows-Ordner auflistenGet-ChildItem -Path $env:windir -Recurse-Filter *.log -ErrorAction SilentlyContinue

Mithilfe der Platzhaltern kann man auch Dateien finden, die nicht immer genau am gleichen Ort liegen. Die folgende Zeile liefert den Pfad zu Microsoft Excel (falls installiert):

# Pfad zu Excel findenGet-ChildItem -Path ,C:\Program Files*\Microsoft Office\Office*\EXCEL.EXE'

Dank der Platzhalterzeichen ist es egal, in welcher Office-Version Microsoft Excel installiert ist und ob es sich um eine 32-Bit- oder 64-Bit-Installation handelt. Möchte man nach mehreren Dateiendungen suchen, verwendet man anstelle von -Filter den Parameter-Include. Er ist langsamer, aber vielseitiger und funktioniert im Gegensatz zu -Filter nur in Verbindung mit -Recurse. Diese Zeile findet eine Reihe von Musikformaten in Ihrem Benutzerprofil:

$Endungen = ,*.wav','*.mp3', ,*.m4a', ,*.m4b'Get-ChildItem -Path $env:userprofile -Include$Endungen -Recurse

Musik,Dateien,Speicher,Festplatte,PowefShell

© Screenshot

So zeigt die PowerShell auch zuvor unbekannte Informationen ("Properties") an: Hier wird gezeigt, welche Informationen in einem Datei-Objekt vorhanden sind.

Mission 2: Versteckte Informationen anzeigen

PowerShell zeigt freiwillig nur einen Bruchteil der Informationen an. Möchte man alle Informationen sehen, greift man zu Select-Object. Normalerweise kann man damit die Ergebnisse beschränken. Diese Zeile würde nur die Spalten LastWriteTime, Length und Name ausgeben:

$Endungen = ,*.wav','*.mp3', ,*.m4a', ,*.m4b'Get-ChildItem -Path $env:userprofile -Include$Endungen -Recurse | Select-Object -PropertyLastWriteTime, Length, Name

Interessanter wird es, wenn man Select-Object gar keine Spaltennamen übergibt, sondern Platzhalterzeichen. Jetzt zeigt die PowerShell auch zuvor unbekannte Informationen (Properties) an. Diese Zeile zeigt, welche Informationen in einem Datei-Objekt vorhanden sind:

PS> Get-ChildItem -Path ,C:\Program Files*\Microsoft Office\Office*\EXCEL.EXE' | Select-Object -Property *

Das Ergebnis zeigt sich: In FullName steht beispielsweise der volle Pfadname, und in Extension die Dateiextension. Wer also gern eine reine Pfadliste seiner Musikdateien wünscht, kommt so ans Ziel:

$Endungen = ,*.wav','*.mp3', ,*.m4a', ,*.m4b'Get-ChildItem -Path $env:userprofile -Include$Endungen -Recurse | Select-Object -ExpandProperty Fullname

Die folgende Zeile würde hingegen den vollen Pfadnamen von Microsoft Excel anzeigen:

# Pfad zu Excel findenGet-ChildItem -Path ,C:\Program Files*\Microsoft Office\Office*\EXCEL.EXE' |Select-Object -Property FullName

Wer hingegen nur den Inhalt einer einzigen Spalte ausgegeben möchte, packt den Inhalt der Spalte mithilfe von -ExpandProperty einfach aus:

# Pfad zu Excel findenGet-ChildItem -Path ,C:\Program Files*\Microsoft Office\Office*\EXCEL.EXE' |Select-Object -ExpandProperty FullName

Grundsätzlich alle Informationen - auch die versteckten - können von nachgeschalteten Cmdlets weiter ausgewertet werden. So lassen sich Fragestellungen klären, für die das ursprüngliche Cmdlet gar nicht konzipiert war. So ist es dann mithilfe von Group-Object auch möglich, die Ergebnisse beispielsweise zu gruppieren - wie der folgenden Aufruf zeigt:

PS> Get-ChildItem -Path $env:USERPROFILE-Filter *.doc? -Recurse | Group-Object-Property Extension

Mit dem Punkt greift man direkt auf eine der vorhandenen Informationsspalten zu. So können Sie das Erstelldatum einer Datei also auch auf die folgende Weise finden:

# zuerst Beispiel-Datei auf Desktop anlegen:$Pfad = "$env:userprofile\Desktop\meinedatei.txt""DateiInhalt" | Out-File -FilePath $Pfad# Auf Datei zugreifen und Information abrufen:$datei = Get-Item -Path $Pfad$datei.CreationTime

Einige Informationen lassen sich sogar nachträglich ändern. Die folgenden Zeilen versetzen die zuvor erstellte Beispieldatei dann direkt ins Mittelalter:

$datei.CreationTime = ,1633-12-10 19:33:22'$datei.LastWriteTime = ,1635-07-09 06:12:01'

Ein Rechtsklick auf die Datei auf Ihrem Desktop und Eigenschaften zeigt, dass die Datumsänderungen tatsächlich durchgeführt wurden.

Musik,Dateien,Speicher,Festplatte,PowefShell

© Screenshot

Alle Informationen können durch nachgeschaltete Cmdlets wieder ausgewertet werden. So werden vielfältige Ausgaben möglich.

Mission 3: Dateireports erstellen

Alle Ergebnisse landen in der PowerShell-Konsole, bis Sie ein anderes Ziel angeben. Dafür sind die Cmdlets zuständig, in deren Namen sich das Verb Out findet. Der folgende Aufruf bringt diese Cmdlets direkt auf den Bildschirm:

PS> Get-Command -Verb Out

Wollen Sie die Ausgabe nun direkt zum Standarddrucker schicken, müssen Sie also lediglich das Cmdlet Out-Printer hinten anhängen:

$Endungen = ,*.wav','*.mp3', ,*.m4a', ,*.m4b'Get-ChildItem -Path $env:userprofi le -Include$Endungen -Recurse | Out-Printer

Klicken Sie im ISE-Editor auf Out-Printer und drücken dann ([F1]), erfahren Sie aus der Hilfe, dass Out-Printer optional den Parameter -Name kennt, mit dem Sie auch einen anderen installierten Druckernamen angeben können.

Wer Out-GridView einsetzt, kann damit ein Mini-Excel öffnen, das dann die Befehlsergebnisse in einem Extrafenster darstellt. Dieses kann zudem per Klick auf die Spaltenüberschriften sortieren und in der obersten Textzeile nach Stichworten ltern. Aber auch HTML-Reports sind mithilfe der Power-Shell schnell und leicht möglich, wobei dann alle Design-Möglichkeiten von HTML zur Verfügung stehen. Das folgende Beispiel demonstriert diese Möglichkeiten:

$style = ,<style>body { font-family:Consolas; font-size:8pt }h1 { text-align:center; font-size:18pt }th { text-align:left; font-size:12pt }</style>,# diesen Ordner durchsuchen:$Path = "$env:userprofi le\Documents"# HTML-Report hier schreiben:$OutputPath = "$env:temp\report.html"# Dateiextensionen:$Endungen = ,*.wav','*.mp3', ,*.m4a', ,*.m4b'Get-ChildItem -Path $Path -Include $Endungen-Recurse |Select-Object -Property Name, Length,FullName |Sort-Object -Property Name |ConvertTo-Html -Head $style -Title ,MeineMusik' -PreContent "<h1>Musik in $Path</h1>" |Out-File -FilePath $OutputPathInvoke-Item -Path $OutputPath

Dieser Musik-Report öffnet sich dann anschließend direkt im Browser und kann von hier aus gedruckt werden. Er ist sortiert nach der Spalte Name. Ein Blick in den Code zeigt, wieso das so ist: Sort-Object wird mit -Property einfach die Spalte übergeben, nach dersortiert werden soll. Sollen Musikdateien nach Größe in absteigender Reihenfolge erscheinen, teilt man Sort-Object bloß seine Wünsche mit. Das kann dann zum Beispiel auf diese Art geschehen:

Sort-Object -Property Length -Descending |

Auch Excel-Reports lassen sich mit wenigen Befehlen erstellen und werden direkt in Excel geöffnet, jedenfalls dann, wenn es installiert ist:

$Zeitstempel = Get-Date -Format ,yyyyMMddHHmmss'$Path = "$env:temp\Musikreport$Zeitstempel.csv"$Endungen = ,*.wav','*.mp3', ,*.m4a', ,*.m4b'Get-ChildItem -Path $env:userprofi le -Include$Endungen -Recurse |Select-Object -Property Name, *Time*, Length,FullName |

Export-CSV -Path $Path -NoTypeInformation-Encoding UTF8 -UseCulture Invoke-Item -Path $Path

Musik,Dateien,Speicher,Festplatte,PowefShell

© Screenshot

Der Operator -f macht's möglich: Die Werte können mithilfe einer Textschablone in unterschiedlichster Form ausgegeben werden.

Mission 4: Ordnergrößen kalkulieren

Häufig will man wissen, wie groß ein Ordner ist oder welche Datenmengen ein Benutzer in seinem Profilordner speichert. Das Cmdlet Measure-Object kann dazu den Inhalt einer Ergebnisspalte aufsummieren.

Möchten Sie wissen, welche Datenmenge Ihre Musik umfasst, gibt Ihnen dieser Aufruf die Antwort:

$Endungen = ,*.wav','*.mp3', ,*.m4a', ,*.m4b'$summe = Get-ChildItem -Path $env:userprofi le-Include $Endungen -Recurse |Measure-Object -Property Length -Sum |Select-Object -ExpandProperty Sum$summe"Gesamtgröße: $summe",Gesamtgröße: {0:#,##0.0} MB' -f ($summe/1MB)

Die kalkulierte Summe wird dann in drei verschiedenen Varianten ausgegeben:

3201201775Gesamtgröße: 3201201775Gesamtgröße: 3.052,9 MB

Den meisten Anwendern wird dabei die letzte Variante angenehmer formatiert erscheinen, da die Werte in MByte und nicht mehr in Byte angezeigt werden. Das macht der Operator -f möglich, der auf seiner linken Seite eine Textschablone erwartet und auf der rechten die Informationen, die in die Schablone einzusetzen sind. Der Screenshot auf Seite 104 untenzeigt einige mögliche Aufrufe mithilfe dieses Operators und ihre Ergebnisse.

Musik,Dateien,Speicher,Festplatte,PowefShell

© Screenshot

Zeige mir die fünf größten Dateien: So können übervolle Festplatten schnell und sinnvoll aufgeräumt und überwacht werden.

Mission 5: Die fünf größten Dateien finden

Die PowerShell-Cmdlets eignen sich aber auch zum Aufräumen übervoller Festplatten. Der folgende Code liefert die fünf größten Dateien in Ihrem Benutzerpro l und nutzt dieselben Bausteine, die schon in unseren bisheriger Beispielen im Einsatz waren:

Get-ChildItem -Path $env:USERPROFILE -Recurse-ErrorAction SilentlyContinue |Sort-Object -Property Length -Descending |Select-Object -First 5 -Property Length,FullName |Format-Table -AutoSize

Neu ist dabei nur Format-Table, mit dem man am Ende einer Befehlskette für eine besonders platzsparend optimierte Ausgabe sorgen kann.

Mehr zum Thema

Wir helfen beim RunDLL-Tuning Ihres Windows-Betriebssystems.
Im Kern von Windows

Das Windows-Systemprogramm RunDLL ist eher unscheibar: Doch wer weiß, wie es zu nutzen ist, bekommt auch bisher gut versteckte Windows-Funktionen in…
Symbolbild PC-Tuning
Windows-Tuning

Mit dem Gratis-Programm Winaero Tweaker optimieren Sie versteckte Windows-Funktionen ganz komfortabel. Wir stellen Ihnen das neue Tuning-Tool im…
Symbolbild PC-Tuning
Tabs, schneller kopieren & Co.

Wir haben Tuning-Tipps für den Windows Explorer: So ändern Sie Ordnersymbole, fügen Tabs hinzu, reaktivieren das Windows-7-Design, kopieren…
Datenträger bereinigen
Windows 7 & Windows 8

Was kann man löschen - was nicht? Wir geben Tipps, wie Sie die Datenträgerbereinigung in Windows 7 und Windows 8 richtig nutzen.
lookeen free, windows suche, alternative, tipps
Gratis-Tool

Lookeen Free ist eine gute Alternative zur Windows Suche. Das kostenlose Desktop-Such-Tool findet zuverlässig Dokumente, Musik, Bilder und mehr.