Fortschritt in PowerShell anzeigen mit Ladebalken
Da man mit PowerShell so gut wie alles machen kann, wird PS oft bei komplexen Abfragen verwendet. Doch man möchte oft wissen, wie weit der Fortschritt der Aufgabe ist. Hier hilft die Funktion Write-Progress
. So kann man mit einfachen Mitteln den Fortschritt in PowerShell anzeigen lassen. Die Darstellung ist ein Ladebalken, beziehungsweise eine so genannte Progressbar oder auch Processbar.
Mit Write-Progress den aktuellen Fortschritt in PowerShell anzeigen
Wie oben schon erwähnt, wird PowerShell oft für sehr komplexe Aufgaben verwendet. Doch das Problem ist, dass man den aktuellen Fortschritt der Aktion oft nicht sieht. Abhilfe schafft hier die Funktion Write-Progress, mit der sich ein Ladebalken darstellen lässt. Somit hat man eine Fortschritt-Anzeige. Doch für den Ladebalken werden wichtige Parameter benötigt:
- Activity = Ist als Art Überschrift zu sehen
- PercentComplete = Angabe des aktuellen Fortschritts
- Status = Beschreibung der aktuellen Tätigkeit
Das sind die wichtigsten Parameter. Natürlich gibt es noch ein paar weitere, die in der Regel aber nicht benötigt werden. Der Grundbefehl lautet also folgendermaßen:
Write-Progress -Activity "Deine Ueberschrift" -PercentComplete 60 -Status "Dein Status"
Der Ladebalken mit Write-Progress
Die Anzeige des aktuellen Fortschritts in PowerShell wird mit einem Ladebalken realisiert. Fakt ist, dass die Fortschrittsanzeige in Prozent angegeben wird. Das bedeutet, dass ein voller Ladebalken 100% entspricht. Lesen wir also Dateien aus, welche als Anzahl nicht genau 100 betragen, so wird die Anzeige nicht korrekt dargestellt. Wir müssen also immer den prozentualen Wert der Variable ermitteln. Ich gebe ein Beispiel:
$meinedaten = Get-ChildItem -Path C:\Windows For($i = 1; $i -le $meinedaten.count; $i++) { Write-Progress -Activity "Daten sammeln" -PercentComplete (($i*100)/$meinedaten.count) -Status "Datei $($meinedaten[$i].Name) ermittelt" sleep -Milliseconds 100 }
Hier lasse ich alle Daten aus dem Pfad C:\Windows ermitteln und die Dateien zählen mit .count
. Wie oben schon genannt, ist ein voller Ladebalken immer 100%. Im angegebenen Pfad liegen aber mehr als 100 Dateien. Somit wäre der Ladebalken schon voll, bevor die Operation abgeschlossen ist. Deswegen wird der prozentuale Wert der Variable berechnet. Die Berechnung ist anhand eines Beispiels sehr einfach:
Ausgangswerte: - 500 Files im Pfad - Aktuell ist der Fortschritt bei Nummer 30 ($i = 30) Prozentrechnung: 30 x 100 = 3.000 3.000 / 500 = 6%
Das bedeutet, dass bei Operation $i = 30 der Ladebalken zu 6% gefüllt ist. Den Fortschritt in PowerShell anzeigen ist also mit Write-Progress relativ einfach. Lediglich das Prozentrechnen macht es ein wenig umständlich.