Diag-V is a PowerShell Module collection of primarily Hyper-V diagnostic functions, as well as several windows diagnostic functions useful when interacting with Hyper-V servers.

With the module imported diagnostics can be run via the desired function name, alternatively, Diag-V can also present a simple choice menu that enables you to browse via console all diagnostics and execute the desired choice.

A complete write-up on Diag-V as well as a video demonstration can be found on the Tech Thoughts blog: http://techthoughts.info/diag-v/

Please feel free to contribute to the project here: https://github.com/techthoughts2/Diag-V

How to run

Install from PowerShell Gallery (Recommended)

  1. Open Administrator ISE or PowerShell console session
  2. Install-Module -Name "Diag-V" -Repository PSGallery
  3. Import module
    • Import-Module Diag-V
  4. Run desired diagnostic
    • Directly by calling function name (see Diagnsotic Functions section below)
    • Run GUI selection menu:
      • Show-DiagVMenu - select desired diagnostic

Install from Technet

  1. Download Zip file and extract
  2. Install module
    • For all users: %ProgramFiles%\WindowsPowerShell\Modules\Diag-V (Recommended)
    • For just you: %UserProfile%\Documents\WindowsPowerShell\Modules\Diag-V
  3. Open Administrator ISE or PowerShell console session
  4. Import module
    • Import-Module Diag-V
  5. Run desired diagnostic
    • Directly by calling function name (see Diagnostic Functions section below)
    • Run GUI selection menu:
      • Show-DiagVMenu - select desired diagnostic

Notes:

You must run Diag-V as an domain user that has privelages for all Cluster nodes if you expect Diag-V to return results from all nodes in the cluster.

List of currently available diagnostics:

 

 
PowerShell
Edit|Remove
<# 
.Synopsis 
    Displays status for all VMs on a standalone Hyper-V server or Hyper-V cluster 
.DESCRIPTION 
    Gets the status of all discovered VMs. Automatically detects if running on a standalone hyp or hyp cluster. If standalone is detected it will display VM status information for all VMs on the hyp. If a cluster is detected it will display VM status information for each node in the cluster. 
.EXAMPLE 
    Get-VMStatus 
 
    This command will automatically detect a standalone hyp or hyp cluster and will retrieve VM status information for all detected nodes. 
.OUTPUTS 
    ---------------------------------------------- 
    RUNNING VMs 
    ---------------------------------------------- 
    HYP1 
    VMs are present on this node, but none are currently running. 
    ---------------------------------------------- 
    HYP2 
    No VMs are present on this node. 
    ---------------------------------------------- 
 
 
    ---------------------------------------------- 
    NOT RUNNING VMs 
    ---------------------------------------------- 
    HYP1 
 
    Name     State CPUUsage MemoryMB Status             IsClustered 
    ----     ----- -------- -------- ------             ----------- 
    PSHost-1   Off        0        0 Operating normally       False 
 
 
    ---------------------------------------------- 
    HYP2 
    No VMs are present on this node. 
    ---------------------------------------------- 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
     Gets the following VM information for all detected Hyp nodes: 
     Name 
     State 
     CPUUsage 
     Memory 
     Uptime 
     Status 
     IsClustered 
#> 
 
<# 
.Synopsis 
    Retrieves basic and advanced VM information for all VMs found on a standalone or cluster 
.DESCRIPTION 
    Gets the VMs configuration info for all VMs. Automatically detects if running on a  
    standalone hyp or hyp cluster. If standalone is detected it will display VM  
    configuration information for all VMs on the hyp. If a cluster is detected it will  
    display VM configuration information for each node in the cluster. This function goes a 
    lot further than a simple Get-VM and provides in depth information on the VM configuration. 
.EXAMPLE 
    Get-VMInfo 
 
    This command will automatically detect a standalone hyp or hyp cluster and  
    will retrieve VM configuration information for all detected VMs. 
.OUTPUTS 
    ---------------------------------------------- 
 
    Name: TestVM-1 
 
    Name                 : TestVM-1 
    CPU                  : 2 
    DynamicMemoryEnabled : True 
    MemoryMinimum(MB)    : 1024 
    MemoryMaximum(GB)    : 8 
    IsClustered          : False 
    Version              : 8.0 
    ReplicationHealth    : NotApplicable 
    OS Name              : Windows Server 2016 Datacenter 
    FQDN                 : WIN-JHKGN3JEA77 
    VHDType-0            : Dynamic 
    VHDSize(GB)-0        : 25 
    MaxSize(GB)-0        : 60 
 
    ---------------------------------------------- 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
    Get the following VM information for all detected Hyp nodes: 
    Name 
    CPU 
    DynamicMemoryEnabled 
    MemoryMinimum(MB) 
    MemoryMaximum(GB) 
    IsClustered 
    Version 
    ReplicationHealth 
    OSName 
    FQDN 
    VHDType 
    VHDSize 
    VHDMaxSize 
#> 
 
<# 
.Synopsis 
    Gets VM replication configuration and replication status for all detected VMs 
.DESCRIPTION 
    Gets the VMs replication status info for all VMs. Automatically detects if running  
    on a standalone hyp or hyp cluster. If standalone is detected it will display VM  
    replication status info for all VMs on the hyp. If a cluster is detected it will  
    display VM replication status information for each node in the cluster. 
.EXAMPLE 
    Get-VMReplicationStatus 
 
    This command will automatically detect a standalone hyp or hyp cluster and will retrieve VM replication status information for all detected nodes. 
.OUTPUTS 
    Standalone server detected. Executing standalone diagnostic... 
 
    Name         Status             ReplicationState ReplicationHealth ReplicationMode 
    ----         ------             ---------------- ----------------- --------------- 
    ARK_DC       Operating normally      Replicating            Normal         Primary 
    ARK_DHCP     Operating normally      Replicating            Normal         Primary 
    ARK_MGMT_MDT Operating normally      Replicating            Normal         Primary 
    ARK_WDS      Operating normally      Replicating            Normal         Primary 
    ARKWSUS      Operating normally      Replicating            Normal         Primary 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
     Get the following VM information for all detected Hyp nodes: 
     Name 
     Status 
     ReplicationState 
     ReplicationHealth 
     ReplicationMode 
#> 
 
<# 
.Synopsis 
    A VM has several components which can reside in a different location. This script will identify the location of all of VM components. 
.DESCRIPTION 
    A VM is comprised of a few components besides just .vhd/.vhdx. This will retrieve the location paths for the VM's configuration files,  
    Snapshot Files, and Smart Paging files. If on a standalone it will display this information for all VMs on the standalone hyp.  
    If a cluster is detected it will display this information for all VMs found on each node. 
.EXAMPLE 
    Get-VMLocationPathInfo 
 
    This command will display the file paths for all VM components. 
.OUTPUTS 
    ---------------------------------------------- 
    HypV1 
    No VMs are present on this node. 
    ---------------------------------------------- 
    Hypv2 
 
 
    VMName                : 2008R2Clust 
    ComputerName          : Hypv2 
    State                 : Off 
    Path                  : \\sofs-csv\VMs\2008R2Clust 
    ConfigurationLocation : \\sofs-csv\VMs\2008R2Clust 
    SnapshotFileLocation  : \\sofs-csv\VMs\2008R2Clust 
    SmartPagingFilePath   : \\sofs-csv\VMs\2008R2Clust 
    ---------------------------------------------- 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
    Get the following VM information for all detected Hyp nodes: 
    VMName 
    ComputerName 
    State 
    ConfigurationLocation 
    SnapshotFileLocation 
    SmartPagingFilePath 
#> 
 
<# 
.Synopsis 
    Displays IntegrationServicesVersion and enabled integration services for all VMs  
.DESCRIPTION 
    Gets the IntegrationServicesVersion and enabled integration services for all VMs. Automatically detects  
    if running on a standalone hyp or hyp cluster. If standalone is detected it will display VM integration  
    services information for all VMs on the hyp. If a cluster is detected it will display VM integration  
    services information for all VMs found on each node. 
.EXAMPLE 
    Get-IntegrationServicesCheck 
 
    This command displays integration services information for all discovered VMs. 
.OUTPUTS 
    ---------------------------------------------- 
    LinuxTest - no integration services installed 
    ---------------------------------------------- 
    LinuxTest3 - no integration services installed 
    ---------------------------------------------- 
    LinuxTest4 - no integration services installed 
    ---------------------------------------------- 
    PDC2 - version: 6.3.9600.16384 
 
    Name                    Enabled 
    ----                    ------- 
    Time Synchronization       True 
    Heartbeat                  True 
    Key-Value Pair Exchange    True 
    Shutdown                   True 
    VSS                        True 
    Guest Service Interface   False 
    ---------------------------------------------- 
    TestLinux2 - no integration services installed 
    ---------------------------------------------- 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
     Get the following VM information for all detected Hyp nodes: 
     IntegrationServicesVersion 
     Enabled status for all integration services 
#> 
 
<# 
.Synopsis 
    Evaluates each VM to determine if Hard Drive space is being taken up by the AutomaticStopAction setting 
.DESCRIPTION 
    Checks each VMs RAM and AutomaticStopAction setting - then tallies the amount of total hard drive space being taken up by the associated BIN files. 
.EXAMPLE 
    Get-BINSpaceInfo 
 
    Gets all VMs, their RAM, and their AutomaticStopAction setting 
.OUTPUTS 
    VMName   Memory Assigned AutomaticStopAction 
    ------   --------------- ------------------- 
    TestVM-1 0                          ShutDown 
 
 
    ---------------------------------------------- 
    Total Hard drive space being taken up by BIN files:  GB 
    ---------------------------------------------- 
    ---------------------------------------------- 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
    Get the following VM information for all detected Hyp nodes: 
    VMName 
    Memory Assigned 
    AutomaticStopAction 
#> 
 
<# 
.Synopsis 
    For each VM detected every associated VHD/VHDX is identified and several pieces of VHD/VHDX information is displayed 
.DESCRIPTION 
    Identifies all VHDs/VHDXs associated with each VM detected. For each VHD/VHDX it pulls several pieces of information and displays to user. It then sums the current VHD/VHDX disk usage and the POTENTIAL VHD/VHDX disk usage dependent on whether the VHDs/VHDXs are fixed are dynamic. 
.EXAMPLE 
    Get-VMAllVHDs 
 
    Displays information for each VHD for every VM discovered 
.OUTPUTS 
    HYP1 
    PSHost-1 
 
        VhdType Size(GB) MaxSize(GB) Path 
        ------- -------- ----------- ---- 
    Differencing       10          60 C:\ClusterStorage\Volume1\VMs\VHDs\PSHost-1_A2B10ECE-58EA-474C-A0FA-A66E2104A345.a... 
    Differencing       33         275 C:\ClusterStorage\volume1\vms\vhds\PSHost_VMs_915F1EA6-1D11-4E6B-A7DC-1C4E30AA0829... 
 
 
    ---------------------------------------------- 
    HYP2 
    No VMs are present on this node. 
    ---------------------------------------------- 
        Total Vhd(x) utilization: 
    ---------------------------------------------- 
    VMs are currently utilizing:  43 GB 
    VMs could POTENTIALLY Utilize:  335 GB 
    ---------------------------------------------- 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
     Get the following VM VHD information for all detected Hyp nodes: 
     VhdType 
     Size(GB) 
     MaxSize(GB) 
     Path 
     Total current disk usage 
     Total POTENTIAL disk usage 
#> 
 
<# 
.Synopsis 
    For each VM detected every associated VHD/VHDX is checked to determine if the VHD/VHDX is shared or not 
.DESCRIPTION 
    Identifies all VHDs/VHDXs associated with each VM detected. For each VHD/VHDX it pulls several pieces of information to display to user. If SupportPersistentReservations is true, the VHD/VHDX is shared. 
.EXAMPLE 
    Get-SharedVHDs 
 
    Displays SupportPersistentReservations information for each VHD for every VM discovered. If SupportPersistentReservations is true, the VHD is shared 
.OUTPUTS 
    VMName   SupportPersistentReservations Path                                   
    ------   ----------------------------- ----                                   
    TestVM-1                         False C:\rs-pkgs\LocalVMs\VHDs\TestVM-1.vhdx 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
     Get the following VM VHD information for all detected Hyp nodes: 
     VMName 
     SupportPersistentReservations 
     Path 
#> 
 
<# 
.Synopsis 
    Determines the current resource allocation health of Hyper-V Server or Hyper-V Cluster 
.DESCRIPTION 
    For single Hyper-V instances this function will pull available 
    CPU and Memory physical resources. It will then tally all VM CPU and memory 
    allocations and contrast that info with available physical chassis resources 
 
    A cpu ratio higher than 4:1 (vCPU:Logical Processors) will be flagged as bad 
    This ratio can be adjusted easily the the code below as there is no best practice 
    published around the most ideal CPU ratio. 
    A static memory higher than 1:1 will be flagged as bad 
    There is no best practice published around dynamic maximum memory so the function 
    will only advise a warning if max memory is higher than available physical memory. 
 
    The same functionality is supported for clustered Hyper-V instances. 
    The function will poll each node in the cluster and provide info on each node. 
    The cluster function will also calculate the simulation loss of one node to determine 
    if VMs could survive and start with one node down. 
 
    Available storage space will also be calculated. For clusters CSV locations will be 
    checked. For standalone Hyps any drive larger than 10GB and not C: will be checked. 
    Drives under 1TB with less than 15% will be flagged as bad. Drives over 1TB with less 
    than 10% will be flagged as bad. 
.EXAMPLE 
    Test-HyperVAllocation 
 
    If executed on a standalone Hyper-V instance it will retrieve CPU/RAM physical resources 
    If exectured on a Hyper-V cluster it will retrieve CPU/RAM physical resrouces for 
    all nodes in the cluster and comapares those available resources to resources assigned 
    to VMs on each Hyper-V instance. Storage utilization will also be evaluated. 
.OUTPUTS 
    ---------------------------------------------------------------------- 
    SystemName: HYP1 
    ---------------------------------------------------------------------- 
    Cores: 8 
    Logical Processors: 16 
    Total Memory: 32 GB 
    Avail Memory for VMs: 24 GB (8GB reserved for Hyper-V Host) 
    Current Free Memory: 6 GB 
    Total number of VMs: 1 
    Total number of VM vCPUs: 8 
    ---------------------------------------------------------------------- 
    Memory resources are still available:             19 % free 
    ---------------------------------------------------------------------- 
    Virtual Processors are not overprovisioned        1 : 1 
    ---------------------------------------------------------------------- 
    Total Startup memory required for Dynamic VMs:    0 GB 
    Total Static memory required for Static VMs:      24 GB 
    ---------------------------------------------------------------------- 
    Total minimum RAM (Startup+Static) required:      24 GB 
    Minimum RAM: 24 GB is exactly at available RAM: 24 GB 
    ---------------------------------------------------------------------- 
    ---------------------------------------------------------------------- 
    SystemName: HYP2 
    ---------------------------------------------------------------------- 
    Cores: 8 
    Logical Processors: 16 
    Total Memory: 32 GB 
    Avail Memory for VMs: 24 GB (8GB reserved for Hyper-V Host) 
    Current Free Memory: 31 GB 
    Total number of VMs: 0 
    Total number of VM vCPUs: 
    ---------------------------------------------------------------------- 
    Memory resources are still available:             97 % free 
    ---------------------------------------------------------------------- 
    Virtual Processors are not overprovisioned        1 : 1 
    ---------------------------------------------------------------------- 
    Total Startup memory required for Dynamic VMs:    0 GB 
    Total Static memory required for Static VMs:      0 GB 
    ---------------------------------------------------------------------- 
    Total minimum RAM (Startup+Static) required:      0 GB 
    Minimum RAM: 0 GB does not exceed available RAM: 24 GB 
    ---------------------------------------------------------------------- 
    ---------------------------------------------------------------------- 
    N+1 Allocation Evaluation: 
    ---------------------------------------------------------------------- 
    VMs would survive a one node failure 
    Total VM RAM minumum: 24 GB - Total Cluster RAM available with one node down: 24 GB 
    ---------------------------------------------------------------------- 
    Storage Allocation Information 
    ---------------------------------------------------------------------- 
    C:\ClusterStorage\Volume1 has the recommended 15% free space. 
    Total Size: 500 GB 
    Free Space: 164 GB 
    Percent Free: 32.7383 
    ---------------------------------------------------------------------- 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Function will automatically detect standalone or cluster and will run the appropriate diagnostic 
    You can change the CPU ratio cutoff from 4:1 to say 6:1 or 8:1 by editing the 
    Highlighted section below to suit your requirements 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
     Get the following information for each Hyper-V instance found 
     System Name 
     Logical Processors 
     Total Memory 
     Free Memory 
     Total number of VMs 
     Total number of VM vCPUs 
     CPU provisioning status 
     Memory provisioning status 
     Free space status 
#> 
 
<# 
.Synopsis 
    Scans specified path and gets total size as well as top 10 largest files 
.DESCRIPTION 
    Recursively scans all files in the specified path. It then gives a total 
    size in GB for all files found under the specified location as well as 
    the top 10 largest files discovered. The length of scan completion is 
    impacted by the size of the path specified as well as the number of files 
.EXAMPLE 
    Get-FileSizes -Path C:\ClusterStorage\Volume1\ 
 
    This command recursively scans the specified path and will tally the total 
    size of all discovered files as well as the top 10 largest files. 
.OUTPUTS 
    Diag-V v1.0 - Processing pre-checks. This may take a few seconds... 
    Note - depending on how many files are in the path you specified this scan can take some time. Patience please... 
    Scan results for: C:\ClusterStorage\Volume1\ 
    ---------------------------------------------- 
    Total size of all files: 336 GB. 
    ---------------------------------------------- 
    Top 10 Largest Files found: 
 
    Directory                                               Name                                                  Size(MB) 
    ---------                                               ----                                                  -------- 
    C:\ClusterStorage\Volume1\VMs\VHDs                      PSHost_VMs.vhdx                                         281604 
    C:\ClusterStorage\Volume1\VMs\VHDs                      PSHost_VMs_915F1EA6-1D11-4E6B-A7DC-1C4E30AA0829.avhdx    33656 
    C:\ClusterStorage\Volume1\VMs\VHDs                      PSHost-1.vhdx                                            18212 
    C:\ClusterStorage\Volume1\VMs\VHDs                      PSHost-1_A2B10ECE-58EA-474C-A0FA-A66E2104A345.avhdx      10659 
    C:\ClusterStorage\Volume1\VMs\PSHost-1\Snapshots        29BFF5A2-3150-4B26-8A64-152193669694.VMRS                 0.09 
    C:\ClusterStorage\Volume1\VMs\PSHost-1\Virtual Machines 8070AD08-E165-4F8C-B249-6B41DDEEE449.VMRS                 0.07 
    C:\ClusterStorage\Volume1\VMs\PSHost-1\Virtual Machines 8070AD08-E165-4F8C-B249-6B41DDEEE449.vmcx                 0.07 
    C:\ClusterStorage\Volume1\VMs\PSHost-1\Snapshots        29BFF5A2-3150-4B26-8A64-152193669694.vmcx                 0.05 
                                                            PSHost-1                                                     0 
                                                            VHDs                                                         0 
 
 
    ---------------------------------------------- 
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
     Get the following information for the specified path: 
     Total size of all files found under the path 
     Top 10 largest files discovered 
#> 
 
<# 
.Synopsis 
    Resolves CSV to a physicalDisk drive 
.DESCRIPTION 
    Discovers all cluster shared volumes associated with the specificed cluster 
    Resolves all cluster shared volumes to physical drives and pulls usefull 
    information about the characteristcs of the associated physical drive 
.EXAMPLE 
    Get-CSVtoPhysicalDiskMapping 
 
    This command retrieves all cluster shared volumes and pulls information  
    related to the physical disk associated with each CSV.  Since no cluster name  
    is specified this command resolves to a locally available cluster (".") 
.EXAMPLE 
    Get-CSVtoPhysicalDiskMappying -clusterName "Clus1.domain.local" 
 
    This command retrieves all cluster shared volumes and pulls information related  
    to the physical disk associated with the CSVs that are associated with the  
    Clus1.domain.local cluster. 
.OUTPUTS 
    #CSVName : Cluster Disk 1 
    #CSVPartitionNumber : 2 
    #Size (GB) : 1500 
    #CSVOwnerNode : node1 
    #FreeSpace (GB) : 697 
    #CSVVolumePath : C:\ClusterStorage\Volume1 
    #CSVPhysicalDiskNumber : 3 
    #Percent Free : 46.49729 
.COMPONENT 
    Diag-V 
.NOTES 
    Adapted from code written by Ravikanth Chaganti http://www.ravichaganti.com 
    Enhanced by: Jake Morrison - TechThoughts - http://techthoughts.info 
.FUNCTIONALITY 
     Get the following information for each CSV in the cluster: 
     CSV Name 
     Total Size of associated physical disk 
     CSV Volume Path 
     Percent free of physical disk - VERY useful 
     CSV Owner Node 
     CSV Partition Number 
     Freespace in (GB) 
#> 
 
<# 
.Synopsis 
    Parses Hyper-V event logs and retrieves log entries based on user provided options 
.DESCRIPTION 
    Scans Hyper-V server for all Hyper-V Event Logs and then filters by user provided options. This functions serves merely to craft the appropriate syntax for 
    Get-WinEvent to retrieve the desired Hyper-V log results. 
.PARAMETER LastMinutes 
    The # of minutes back in time you wish to retrieve Hyper-V logs. Ex: 90 - this would retrieve the last 90 minutes of Hyper-V logs. If this parameter is specified StartDate and EndDate cannot be used. 
.PARAMETER StartDate 
    The initial date that logs should be retrieved from. Ex: MM/DD/YY (12/07/17 - December 07, 2017).  If this parameter is specified LastMinutes cannot be used. 
.PARAMETER EndDate 
    The end date that logs should be retrieved from. Ex: MM/DD/YY (12/07/17 - December 07, 2017).  If this parameter is specified LastMinutes cannot be used. 
.PARAMETER Newest 
    Specifies the number of latest log entries to retrieve.  Ex: 5 - this would retrieve the latest 5 entries 
.PARAMETER FilterText 
    Wild card string to search logs for.  Log data will only be returned that contains this wild card string. Ex: Switch - this would retrieve entries that contain the word switch 
.PARAMETER WarningErrorCritical 
    If this switch is used only Warning, Error, Critical log data will be returned. 
.EXAMPLE 
    Get-HyperVLogs 
 
    Retrieves all available Hyper-V logs from the server. 
.EXAMPLE 
    Get-HyperVLogs -Newest 15 -Verbose 
 
    Retrieves the most recent 15 log entries from all available Hyper-V logs on the server with verbose output. 
.EXAMPLE 
    Get-HyperVLogs -FilterText Switch -Newest 2 -ErrorsOnly -Verbose 
 
    Retrieves the most recent 2 Hyper-V log entries that are Warning/Error/Critical that contain the word switch 
.EXAMPLE 
    Get-HyperVLogs -StartDate 11/01/17 -ErrorsOnly 
 
    Retrieves all Warning/Error/Critical Hyper-V log entries from November 1, 2017 to current date 
.EXAMPLE 
    Get-HyperVLogs -StartDate 11/01/17 -EndDate 12/01/17 
 
    Retrieves all Hyper-V log entries from November 1, 2017 to December 1, 2017 
.EXAMPLE 
    Get-HyperVLogs -LastMinutes 90 -Newest 20 -FilterText Switch 
 
    Retrieves all Hyper-V logs from the last 90 minutes, returns the newest 20 that contains the word switch 
.OUTPUTS 
    ProviderName: Microsoft-Windows-Hyper-V-VMMS 
 
    TimeCreated          Id ProviderName                   LevelDisplayName Message                                                                                                                                       
    -----------          -- ------------                   ---------------- -------                                                                                                                                       
    12/07/17 12:06:16 26002 Microsoft-Windows-Hyper-V-VMMS Information      Switch deleted, name='C14EF845-E76A-4318-BE31-F0FB0739B9A4', friendly name='External'.                                                        
    12/07/17 12:06:16 26018 Microsoft-Windows-Hyper-V-VMMS Information      External ethernet port '{4BB35159-FECD-4845-BD69-39C9770913AB}' unbound.                                                                      
    12/07/17 12:06:16 26078 Microsoft-Windows-Hyper-V-VMMS Information      Ethernet switch port disconnected (switch name = 'C14EF845-E76A-4318-BE31-F0FB0739B9A4', port name = '6B818751-EC33-407C-BCD2-A4FA7F7C31FA'). 
    12/07/17 12:06:16 26026 Microsoft-Windows-Hyper-V-VMMS Information      Internal miniport deleted, name = '6BC4B864-27B7-4D1A-AD05-CF552FA8E9D0', friendly name = 'External'.                                         
    12/07/17 12:06:15 26078 Microsoft-Windows-Hyper-V-VMMS Information      Ethernet switch port disconnected (switch name = 'C14EF845-E76A-4318-BE31-F0FB0739B9A4', port name = '7BF33E31-7676-4344-B168-D9EDB49BBBB6'). 
    12/07/17 12:06:02 26142 Microsoft-Windows-Hyper-V-VMMS Error            Failed while removing virtual Ethernet switch.                                                                                                
    12/07/17 12:06:02 26094 Microsoft-Windows-Hyper-V-VMMS Error            The automatic Internet Connection Sharing switch cannot be modified.                                                                          
    12/07/17 12:05:11 26002 Microsoft-Windows-Hyper-V-VMMS Information      Switch deleted, name='CA2A6472-F6C5-4C6C-84BD-06489F08E4F8', friendly name='Internal'.   
.COMPONENT 
    Diag-V 
.NOTES 
    Author: Jake Morrison - TechThoughts - http://techthoughts.info 
    Contributor: Dillon Childers 
    Name                           Value                                            
    ----                           -----                                           
    Verbose                        5                                               
    Informational                  4                                               
    Warning                        3                                               
    Error                          2                                               
    Critical                       1                                               
    LogAlways                      0 
    Contribute or report issues on this function: https://github.com/techthoughts2/Diag-V 
    How to use Diag-V: http://techthoughts.info/diag-v/ 
.FUNCTIONALITY 
     Retrieves Hyper-V Event Logs information 
#>