Get-Counter, Export-Counter: Leistungsindikatoren auswerten in PowerShell

    .blg-Datei in Perfmon importierenWindows enthält seit mehreren Genera­tionen das grafische Tool Perfmon, um Leistungs­daten des Systems zu ermitteln. Alter­nativ dazu kann man alle dort verfüg­baren Indika­toren auch über PowerShell abrufen und die ge­speicher­ten Ergeb­nisse anschließend mit Perfmon visualisieren.

    Wie bei anderen Aufgaben der Systemverwaltung besteht der Vorteil von PowerShell gegenüber GUI-Tools darin, dass man Operationen automatisieren und bestimmte Jobs in einem Durchgang ausführen kann.

    Zutreffende Counter ermitteln

    Das trifft auch auf das Abrufen von Leistungs­indikatoren zu, die man in Perfmon einzeln von Hand zu einer Über­wachung hinzufügen muss. Eine Sammlung von Indikatoren kann man zwar speichern, aber bei einer neuen Auswertung geht das Zusammen­klicken der Counter wieder von vorne los.

    Leistungsindikatoren in Perfmon hinzufügen

    Das Cmdlet Get-Counter erleichtert das Erfassen von Leistungsdaten schon im Vorfeld. Zur Vorbereitung einer Performance-Analyse gehört es nämlich, die richtigen Indikatoren zu finden. In Perfmon muss man dafür durch eine lange Liste von Sets scrollen, und zwar in einem klein geratenen Dialog, dessen Größe man nicht ändern kann. Jede Sektion muss man separat aufklappen, um die Counter auszuwählen.

    Mit PowerShell kann man sich sämtliche Sets übersichtlich in einer Liste anzeigen lassen und dazu eine Beschreibung ausgeben:

    Get-Counter -ListSet * | select CounterSetName, Description | Out-GridView

    Das Weiterleiten an Out-GridView bewirkt eine grafische Darstellung des Ergebnisses und bietet zudem die Möglichkeit, die Liste anhand von Suchbegriffen zu filtern.

    Die Liste aller Counter-Sets lässt sich in Out-GridView durchsuchen.

    Hat man den Namen des passenden Sets gefunden, dann kann man im nächsten Schritt die darin enthaltenen Counter auflisten. Für Physikalischer Datenträger würde das so gehen:

    (Get-Counter -ListSet "Physikalischer Datenträger").Paths

    Möchte man diese zum Beispiel auf alle jene Indikatoren einschränken, die nur Lesezugriffe registrieren, dann könnte man dies mit Hilfe von Select-String tun:

    (Get-Counter -ListSet "Physikalischer Datenträger").Paths | Select-String "Lese"

    Pfade für bestimmte Instanzen

    Meistens möchte man nicht die Performance von allen Laufwerken oder allen virtuellen Maschinen erfassen, sondern nur einzelne Datenträger oder VMs untersuchen. In diesem Fall benötigt man statt Paths die Eigenschaft PathsWithInstances:

    (Get-Counter -ListSet "Physikalischer Datenträger").PathsWithInstances

    Benötigt man nur die Indikatoren für Laufwerk e:, dann könnte man diese so ausfiltern:

    $c = (Get-Counter -ListSet "Physikalischer Datenträger").PathsWithInstances | sls "Lese" | sls "e:"

    Dieser Aufruf speichert die Pfade aller Counter, die Lesezugriffe für das Laufwerk e: überwachen, in der Variablen $c (sls ist ein Alias für Select-String).

    Werte für Counter ermitteln

    Im nächsten Schritt kann man nun diese Liste an Set-Counter übergeben, um die Leistungs­daten abzurufen. Will man dies auf einem entfernten Rechner tun, dann gibt man diesen über den ParameterComputerName an.

    In der Regel wird man nicht mit einem einzelnen Wert zufrieden sein, sondern das Verhalten der System­komponente über einen bestimmten Zeitraum überwachen wollen.

    Dafür sind die Parameter MaxSamples und Continuous zuständig. Letzterer bewirkt, dass Get-Counter so lange läuft, bis es mit Strg + C unterbrochen wird. Für MaxSamples gibt man einen Wert an, der sich an den Abständen zwischen den Messungen orientiert.

    Per Voreinstellung werden die Daten einmal pro Sekunde eingelesen, so dass ein MaxSamples von 120 einen Zeitraum von 2 Minuten erfasst. Die Intervalle lassen sich mit SampleInterval anpassen, der Zeitraum wird in Sekunden angegeben.

    $c | Get-Counter -MaxSamples 120

    Dieser Befehl gibt die Werte für alle Lesezugriffe auf das Laufwerk e: im Sekundenabstand auf dem Bildschirm aus. Damit kann man in der Regel nicht allzu viel anfangen, deshalb wird man die Daten wahrscheinlich auf Platte schreiben, um sie anschließend auswerten zu können.

    Leistungsdaten exportieren

    Diese Aufgabe übernimmt Export-Counter, das verschiedene Dateiformate unterstützt. Für eine anschließende Auswertung eignet sich etwa CSV, wo man beispielsweise alle Werte für bestimmte Counter aufsummieren kann:

    $c | Get-Counter -MaxSamples 120 | Export-Counter -Path .\counter.csv -FileFormat csv

    Gibt man den Parameter FileFormat nicht an, dann verwendet Export-Counter standardmäßig ein binäres Format.

    Die erfassten Counter für Lesezugriff nach dem Import in der Leistungsüberwachung (Perfmon).

    Dieses eignet sich besonders zum Datenaustausch mit Perfmon, wo man die Daten visualisieren kann, indem man einfach auf die exportierte Datei mit der Endung .blg doppelklickt.

    1 Kommentar

    Bild von Gast
    Gast sagt:
    29. September 2016 - 17:05

    Wie bekomme ich aber im Script die Zahlen von Get-Counter in eine Variable?