Hyper-V Performance Monitor Tool (PowerShell)

Monitor and view Hyper-V VM Guest Performance on your Hyper-V Hosts. This free PerfMon Tool Monitors CPU, Memory, Disk I/O and Network Statistics as seen from inside the Guest. All data is retrieved via WMI only,no modules or software install required,run from any member server.

4.9 Star
12,594 times
Add to favorites
E-mail Twitter del.icio.us Digg Facebook
Sign in to ask a question

  • Is it possible to use IP address in place of DNS name in the cmdlet to fetch the VM performance parameters?
    1 Posts | Last post September 06, 2018
    • I have a requirement for using IP Address and admin user credentials to access the Hyper-V VM performance parameters. Is it possible to use IP address in place of DNS name in the cmdlet to fetch the VM performance parameters?
      Please let me know. 
  • Page faults
    1 Posts | Last post May 25, 2018
    • Great tool, thank you a lot!!
      What do you think about adding the Page Faults of the VMs?
  • CPU
    1 Posts | Last post October 24, 2017
    • Hi
      I have a question to CPU.
      non of my VMs is showing one of the following parameters:
      CPU MemConfigured(M) MemUsed(M)
      also NIC is emty.
      what problem could be there?
  • DiskRead/Write/QueueLength Blank
    1 Posts | Last post September 28, 2017
    • Hi Ruud,
      This script is exactly what I was looking for except that my DiskRead/Write (IOPS) and DiskQueueLength are showing as 0
      My environment:
      Hosts: Hyper-V 2012  ( NOT R2 )
      Guests:  Windows 2008 R2
      Storage:  Compellent SAN
      The rest of the default counters have values, but those 3 don't.  The reason for the script is that I am trying to identify which Guest is causing extremely high IOPS against our SAN during specific times.
      Thanks for your hard work on this script!
  • Update the output automatically
    1 Posts | Last post August 24, 2017
    • Hi Ruud, first off thank you for this very useful script and good work. My question is that is it possible to have the GUI output to update on real time or at certain interval. So that we don't have to re-run the script over and over again and only getting a snippet for that specified time. 
  • Unmatched disk / no disks
    2 Posts | Last post April 05, 2017
    • Exactly what I am looking for, thank you for this great work!
      I use Hyper-V Clusters with iSCSI CSV, just usual.
      In my list there is only [unmatched disk] showing and in the VM line NoDisks.
      Any idea?
    • Strange, should be something with the iSCSI path. Can you send me a screenshot and send me the path of one of the VM's listed to ruud@ruudborst.nl ? I will try to see if I can find the problem, no guarantees :) 
  • Thank You
    2 Posts | Last post January 06, 2017
    • Very nice script, I especially like the PSObjects functionality. I use it to push all data into Graphite, and I've made some killer Grafana dashboards to visualize the data. You really made my day :)
      Just one question, the memory used metric seems to work for me when a VM has dynamic memory enabled, but when that's disabled it just reports all configured memory. Is this by design?
    • Thanks! You gave me some inspiration Ruurd :) 
      Regarding your question. The allocated memory is the "MemUsed(M) column" and also visible in the guest OS. For example, if you only configure 4096 (MemConfigured) without dynamic memory the guest OS will see 4096 memory (MemUsed) and Hyper-V allocates the full 4096. When you enable and configure dynamic memory you still configured the maximum of 4096 (MemConfigured) but now you are able to set the minimum at 512. If the Guest OS only needs let's say 600 initially then Hyper-V allocates for example 784 (Memused) which is visible in the OS and expands this allocation in steps when demand grows. So when you disable dynamic memory it allocates the full 4096 (Memused) again even though your OS only needs 700.
  • NIC Sent/NIC Received
    3 Posts | Last post October 19, 2016
    • Awesome script. I have a bunch of VMs that have a name that contains an underscore (for example abc_vm)
      the NIC Sent and NIC Received is blank for these VMs. Data is populated for all other VMs.
    • Thanks for reporting! I will fix that, expect a new version with a couple of days. Regards, Ruud
    • Found some time, I fixed the issue. Please download the script again and let me know if its fixed?
  • RAM not displaying correctly
    2 Posts | Last post May 17, 2016
    • Hey Ruud, I'm not seeing the RAM display correctly on at least one of my hosts.  Here's the output for the host I'm working on currently, using only -psobject and -name switches...
      VM               : dxxxxxxxxxxxxxxx1
      HOST             : sxxxxxxxxxx7
      CPU              : 3
      MemConfigured(M) : 7510
      MemUsed(M)       : 7510
      Location         : LocalDisk
      NICSent(K)       : 3884
      NICReceived(K)   : 4022
      DiskRead(K)      : 8
      DiskRead(IOPS)   : 2
      DiskWrite(K)     : 60
      DiskWrite(IOPS)  : 6
      DiskQueueLength  : 0
      VM               : dxxxxxxxxxxxxn1
      HOST             : sxxxxxxxxxx7
      CPU              : 31
      MemConfigured(M) : 7510
      MemUsed(M)       : 7510
      Location         : LocalDisk
      NICSent(K)       : 23201
      NICReceived(K)   : 18442
      DiskRead(K)      : 0
      DiskRead(IOPS)   : 0
      DiskWrite(K)     : 0
      DiskWrite(IOPS)  : 0
      DiskQueueLength  : 0
      VM               : _Total (LocalDisk)
      HOST             :
      CPU              :
      MemConfigured(M) :
      MemUsed(M)       :
      Location         :
      NICSent(K)       :
      NICReceived(K)   :
      DiskRead(K)      : 8
      DiskRead(IOPS)   : 2
      DiskWrite(K)     : 60
      DiskWrite(IOPS)  : 6
      DiskQueueLength  : 0
      VM               : _Total (_VMs)
      HOST             :
      CPU              :
      MemConfigured(M) : 15020
      MemUsed(M)       : 15020
      Location         :
      NICSent(K)       : 27085
      NICReceived(K)   : 22464
      DiskRead(K)      : 8
      DiskRead(IOPS)   : 2
      DiskWrite(K)     : 60
      DiskWrite(IOPS)  : 6
      DiskQueueLength  : 0
      But the reality of it is that each of these VMs have 22528MB of RAM assigned.  Server 2012R2 host, script was run remotely and locally with the same result
    • Hi Phatman113, thanks for appreciating my tool! And of course for your valuable feedback. Could you move the VM to another host or change the state of the VM (stop/start)? Sometimes the Hyper-V WMI performance counters are not updated correctly and remain stale until an update action occurs which refreshes the counters. I encountered numerous problems with these performance counters not being updated, they were resolved by moving the VM to another host. If that's not the case then lookup the memory for that VM via perfmon.msc by adding the relevant 'Hyper-V Dynamic Memory VM\guest visible physical memory' and 'physical memory' counter for that VM. I use these counter with 'get-counter' to determine the 'MemUsed' and 'MemConfigured' values. Memused changes when you use dynamic memory, memconfigured stays the same. Let me know and you can always e-mail me at ruud@ruudborst.nl
  • Feedback!
    2 Posts | Last post May 16, 2016
    • I really appreciate any feedback about the script like suggestions or any bug you encountered. Looking forward to hear from you.
    • Ruud, this is an awesome tool!  have you looked into pairing it with other monitoring systems, or a way to automate it?  I'm looking to roll it into a solarwinds monitor of some form, I'll try to come back with any additional info I end up with any special requirements to make it work.  Thanks for your work putting this together, and especially for having multiple output options (gui, csv, psobject...)
1 - 10 of 16 Items