2

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.

Ladebalken Fortschritt Write-Progress in PowerShell

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.

Johannes Huber
 

In seiner Freizeit macht Johannes nichts lieber, als für ITnator Beiträge zu schreiben. Input bekommt er hierfür von Problemen in der IT Administration von Servern, Clients und vielen weiteren IT Komponenten.

  • Sönke sagt:

    Funktioniert, macht die Abfrage aber seeeehr langsam. Gibt es da einen schnelleren Weg?

    • Johannes sagt:

      Welche Abfrage passiert sehr langsam?

      Je nach dem was du für eine Abfrage du machst, spielen natürlich einige Faktoren eine Rolle:
      – Größe des Ordners
      – Leistung des Rechners
      – Komplexität deiner Abfrage
      – etc.

  • sidebar
    >