Kleine Tipps für Zwischendurch (Teil 20) – eine Dateisuchliste erstellen

Wer wochen- oder monatelang „Vor-Sich-Hin-skriptet“ produziert viele Dutzend kleiner Skripts, die sich meist auf verschiedene Verzeichnisse verteilen. Dass man dabei irgendwann den Überblick verliert ist klar. Zum Glück ist es kein allzu großes Problem, sich einen erneuten Überblick zu verschaffen. Ein

Get-Childitem -path . -Filter *.ps1 -recurse

durchsucht mit dem aktuellen Verzeichnis beginnend alle Unterverzeichnisse nach Ps1-Dateien und gibt ihre „Eckdaten“ aus. Wer es etwas übersichtlicher möchte, kann die Namen und Verzeichnisse in eine Datei schreiben. Der folgende Befehl legt eine Textdatei Ps1Liste.txt mit den Namen und Pfaden aller gefundenen Ps1-Dateien an:

Dir -path . -filter *.ps1 -recurse | foreach { add-content -Path Ps1Liste.txt -value („Datei: {0} Verzeichnis: {1}“ -f $_.Name, $_.DirectoryName) }

Für den Anfang nicht schlecht, aber in der Praxis möchte man doch etwas mehr Komfort:

>Es sollen pro Datei nur deren Name und ihr Verzeichnis ausgegeben werden

>Die Ausgabe soll nach Dateinamen sortiert werden

>Zusätzlich soll die Nr vorangestellt werden

>Während der Ausgabe soll der Fortschritt angezeigt werden

>Die Ausgabe soll im Html-Format erfolgen

Der folgende Befehl leistet alles das (am Ende wird die Html-Datei sogar angezeigt):

$Anzahl=0;dir -path . -filter *.ps1 -recurse | Sort-object Name | Foreach {  $Anzahl++; $_ | Select-object @{Name=“Nr“;Expression={$Anzahl}},@{Name=“Datei“; Expression={$_.Name}},@ Name=“Verzeichnis“;Expression={$_.DirectoryName}};Write-progress -activity „Suche läuft…“ -Status $Anzahl } | Convertto-html -Title „PS1-Dateiliste“ > Ps1Liste.html;Invoke-item Ps1Liste.html

Das Beispiel zeigt zum einen, was sich alles in eine Befehlszeile packen lässt (das Ganze ist noch steigerungsfähig), es zeigt aber auch sehr schön, dass durch solche „Befehlsakrobatik“ darunter „ein wenig“ die Lesbar-, Nachvollziehbar – und vor allem Erweiterbarkeit leidet.

PS: Dass beim via Select-Object erzeugten Objekt neue Eigenschaften angelegt werden ist praktisch, aber nicht notwendig. Der kleine Vorteil ist, dass sich dadurch der Name der Property frei vergeben lässt. Dass der Fortschritt erst bei der Ausgabe (und damit zu einem Zeitpunkt, wo der Befehl fasst fertig ist) lässt sich nicht vermeiden, da Get-Childitem die Objekte scheinbar erst dann in die Pipeline legt, wenn die „Ergebnisliste“ fast komplett ist.

PSPS: In den nächsten Wochen werden ich den Blog selber hosten und mir dann auch etwas für eine bessere Formatierung der Skriptzeilen einfallen lassen.

Schreibe einen Kommentar

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s