Tags: Monitoring, Performance, PowerShell
Windows enthält seit mehreren Generationen das grafische Tool Perfmon, um Leistungsdaten des Systems zu ermitteln. Alternativ dazu kann man alle dort verfügbaren Indikatoren auch über PowerShell abrufen und die gespeicherten Ergebnisse 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 Leistungsindikatoren zu, die man in Perfmon einzeln von Hand zu einer Überwachung hinzufügen muss. Eine Sammlung von Indikatoren kann man zwar speichern, aber bei einer neuen Auswertung geht das Zusammenklicken der Counter wieder von vorne los.
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.
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 Leistungsdaten abzurufen. Will man dies auf einem entfernten Rechner tun, dann gibt man diesen über den ParameterComputerName an.
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.
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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- WhatsUp Gold Free Edition: Bis zu 20 Server kostenlos überwachen
- Praxisbeispiel für Action Cards: Alert bei geringem Speicherplatz an Microsoft Teams senden und von dort WAC starten
- Stoppuhr mit PowerShell einrichten
- Monitoring mit NetCrunch 11: Zusätzliche Überwachungspakete, verbesserte Event-Historie, neue Web-Konsole
- Statt Mail-Alerts: Systemnachrichten über Webhooks an Microsoft Teams senden
Weitere Links
1 Kommentar
Wie bekomme ich aber im Script die Zahlen von Get-Counter in eine Variable?