Introduction
When outages occur or performance drops, fast and structured diagnostics can mean the difference between a minor blip and a major incident. PowerCLI gives you deep visibility into all layers of your VMware stack and enables you to script repeatable investigations.
This article will guide you through workflows to:
- Identify and isolate VM performance issues
- Check host connectivity and hardware status
- Diagnose snapshot sprawl and storage latency
- Inspect NSX segment and DFW rule misconfigurations
- Export results for collaboration or escalation
My Personal Repository on GitHub
Workflow 1: Diagnosing a Slow VM
Step 1: Check VM Power State and Tools
Get-VM -Name "App01" | Select Name, PowerState, @{N="ToolsStatus";E={$_.ExtensionData.Guest.ToolsStatus}}
Step 2: Inspect CPU and Memory Usage
Get-Stat -Entity "App01" -Stat cpu.usage.average, mem.usage.average -Realtime -MaxSamples 20
Step 3: Confirm Host CPU Load
Get-VMHost -Name (Get-VM -Name "App01").VMHost | Get-Stat -Stat cpu.usage.average
Workflow 2: Snapshot Sprawl Impact
Get-VM | Get-Snapshot | Where-Object {$_.Created -lt (Get-Date).AddDays(-10)} | Select VM, Name, Created
If performance issues align with old snapshots, plan for consolidation.
Workflow 3: Host Diagnostic Snapshot
Step 1: Check Host Connection and Build
Get-VMHost | Select Name, ConnectionState, Version, Build
Step 2: Inspect Host Hardware Warnings
Get-VMHost | Get-VMHostHardware | Select MemorySize, CpuModel, CpuTotalMhz
Step 3: Validate Service Status
Get-VMHost | Get-VMHostService | Where-Object {$_.Running -eq $false}
Workflow 4: NSX-T Logical Switch and Segment Validation
Assuming PowerCLI NSX-T module is imported:
Get Logical Segments and Uplink Mappings
Get-NsxLogicalSwitch | Select DisplayName, Vlan, TransportZoneId
Check DFW Rules and Applied Objects
Get-NsxFirewallRule | Where-Object {$_.Enabled -eq $true} | Select DisplayName, Action, Source, Destination
Validate Edge Node Status
Get-NsxEdgeNode | Select Name, State, Fqdn, DeploymentType
Diagram: Troubleshooting Flow Map

Exporting Troubleshooting Data
Export VM and Host Summary to CSV
Get-VM | Select Name, PowerState, VMHost, @{N="ToolsStatus";E={$_.ExtensionData.Guest.ToolsStatus}} | Export-Csv "C:\Reports\VM_Troubleshooting.csv" -NoTypeInformation
Use Case: Escalation Prep for Tier 2
When an issue needs escalation:
- Use PowerCLI to collect environmental state
- Export CSVs or HTML reports
- Attach sanitized PowerShell logs or summaries
Sample summary collection:
$vm = Get-VM -Name "SQL01"
$vm | Select Name, PowerState, VMHost | Export-Csv "C:\Temp\vm_diag.csv" -NoTypeInformation
Common Troubleshooting Pitfalls
| Problem | Solution |
|---|---|
| Stat collection fails | VM may be powered off or disconnected. Confirm connection state |
| NSX segment missing in Get-* output | Check permissions or use REST-based API bindings |
| CPU usage shows zero | Use longer duration, not just real-time counters |
| Host hardware commands return empty | Run as admin and validate CIM provider status |
What’s Next
Final article in this series will focus on:
- Wrapping up automation best practices
- Sharing a modular PowerCLI toolbox structure
- Preparing scripts for Git, scheduling, and team sharing