Hyper-VMicrosoftPowershellWindows Server

Top 20 Essential PowerShell Cmdlets for Hyper-V Management


Microsoft Hyper-V is a powerful virtualization platform that enables IT professionals to create and manage virtual machines (VMs) efficiently. While the Hyper-V Manager provides a graphical user interface (GUI) for basic management tasks, PowerShell offers a more robust and flexible approach to automating and streamlining Hyper-V administration. In this article, we’ll explore the top 20 essential PowerShell cmdlets that every Hyper-V administrator should know.


The Get-VM cmdlet is the foundation for retrieving information about virtual machines on a Hyper-V host. It allows you to list all VMs or filter them based on specific criteria, such as name or state.


# List all VMs

# List VMs with a specific name
Get-VM -Name "MyVM"

# List VMs in a specific state (Running, Off, Paused)
Get-VM | Where-Object {$_.State -eq 'Running'}

Start-VM and Stop-VM

These cmdlets are used to power on and power off virtual machines, respectively. They provide options to save or discard the current state of the VM during shutdown.


# Start a VM
Start-VM -Name "MyVM"

# Stop a VM and save its state
Stop-VM -Name "MyVM" -Save


The New-VM cmdlet creates a new virtual machine based on the specified configuration. It allows you to set various parameters, such as memory, virtual processors, and network adapters.


# Create a new VM with basic settings
New-VM -Name "MyNewVM" -MemoryStartupBytes 2GB -Generation 2 -NewVHDPath "C:\VMs\MyNewVM.vhdx" -NewVHDSizeBytes 50GB -SwitchName "External Virtual Switch"


This cmdlet deletes a virtual machine from the Hyper-V host. It provides options to remove the VM’s files or keep them for later use.


# Remove a VM and its associated files
Remove-VM -Name "MyVM" -Force


The Get-VMSnapshot cmdlet retrieves information about snapshots associated with a virtual machine. Snapshots are point-in-time copies of a VM’s state, which can be useful for testing or rollback purposes.


# List all snapshots for a VM
Get-VMSnapshot -VMName "MyVM"


This cmdlet creates a new snapshot for a virtual machine, capturing its current state. It allows you to specify a name and description for the snapshot.


# Create a new snapshot for a VM
Checkpoint-VM -Name "MyVM" -SnapshotName "Before Update" -ComputerName "HyperVHost"



# Restore a VM to a specific snapshot
Restore-VMSnapshot -VMName "MyVM" -Name "Before Update"


This cmdlet retrieves information about the integration services installed on a virtual machine. Integration services enable seamless interaction between the host and guest operating systems, providing features like time synchronization, data exchange, and enhanced session mode.


# List all integration services for a VM
Get-VMIntegrationService -VMName "MyVM"

Enable-VMIntegrationService and Disable-VMIntegrationService

hese cmdlets enable or disable specific integration services for a virtual machine.


# Enable the Guest Service Interface for a VM
Enable-VMIntegrationService -VMName "MyVM" -Name "Guest Service Interface"

# Disable the Shutdown Service for a VM
Disable-VMIntegrationService -VMName "MyVM" -Name "Shutdown"


The Get-VMNetworkAdapter cmdlet retrieves information about the network adapters configured for a virtual machine. It allows you to view details such as the adapter’s name, MAC address, and the virtual switch it’s connected to.


# List network adapters for a VM
Get-VMNetworkAdapter -VMName "MyVM"

Add-VMNetworkAdapter and Remove-VMNetworkAdapter

These cmdlets add or remove network adapters from a virtual machine. They provide options to specify the virtual switch, MAC address, and other adapter settings.


# Add a new network adapter to a VM
Add-VMNetworkAdapter -VMName "MyVM" -SwitchName "Internal Switch"

# Remove a network adapter from a VM
Remove-VMNetworkAdapter -VMName "MyVM" -Name "Network Adapter 2"


This cmdlet retrieves information about the virtual hard disks attached to a virtual machine. It displays details such as the disk path, size, and controller type.


# List virtual hard disks for a VM
Get-VMHardDiskDrive -VMName "MyVM"

Add-VMHardDiskDrive and Remove-VMHardDiskDrive

These cmdlets allow you to add or remove virtual hard disks from a virtual machine. You can specify the disk path, controller type, and other settings during the operation.


# Add a new virtual hard disk to a VM
Add-VMHardDiskDrive -VMName "MyVM" -Path "C:\VMs\NewDisk.vhdx" -ControllerType IDE

# Remove a virtual hard disk from a VM
Remove-VMHardDiskDrive -VMName "MyVM" -ControllerNumber 1 -ControllerLocation 0


The Get-VMProcessor cmdlet retrieves information about the virtual processors assigned to a virtual machine. It displays details such as the number of processors, their compatibility mode, and resource control settings.


# List virtual processor details for a VM
Get-VMProcessor -VMName "MyVM"


This cmdlet modifies the virtual processor configuration for a virtual machine. It allows you to change the number of processors, their compatibility mode, and resource control settings.


# Set the number of virtual processors for a VM
Set-VMProcessor -VMName "MyVM" -Count 4



# List memory details for a VM
Get-VMMemory -VMName "MyVM"


This cmdlet modifies the memory configuration for a virtual machine. It allows you to change the startup memory, maximum memory, and dynamic memory settings.


# Set the startup memory for a VM
Set-VMMemory -VMName "MyVM" -StartupBytes 4GB


The Get-VMSwitch cmdlet retrieves information about the virtual switches configured on the Hyper-V host. It displays details such as the switch name, type (external, internal, or private), and associated network adapters.


# List all virtual switches on the host


This cmdlet creates a new virtual switch on the Hyper-V host. It allows you to specify the switch type, network adapter, and other settings.


# Create a new external virtual switch
New-VMSwitch -Name "External Switch" -NetAdapterName "Ethernet" -AllowManagementOS $true


The Remove-VMSwitch cmdlet deletes a virtual switch from the Hyper-V host. It provides options to force the removal and migrate any associated virtual machines to another switch.


# Remove a virtual switch
Remove-VMSwitch -Name "Internal Switch" -Force


PowerShell provides a powerful and flexible way to manage Hyper-V environments. By mastering these top 20 essential cmdlets, you’ll be well-equipped to automate and streamline various virtual machine management tasks, from creating and configuring VMs to managing snapshots, network adapters, and virtual switches. With PowerShell, you can enhance your productivity, consistency, and efficiency in administering Hyper-V infrastructures.


  1. Can I use these cmdlets remotely to manage Hyper-V hosts? Yes, you can use PowerShell remoting to execute these cmdlets on remote Hyper-V hosts. Simply establish a PowerShell session with the remote host using Enter-PSSession or Invoke-Command.

  2. How can I learn more about the parameters and options for each cmdlet? You can use the Get-Help cmdlet to access detailed information about each cmdlet, including its parameters, examples, and related topics. For example, Get-Help Start-VM -Detailed will provide comprehensive documentation for the Start-VM cmdlet.

  3. Can I automate these cmdlets using scripts or modules? Absolutely! PowerShell scripts and modules are excellent ways to automate and streamline Hyper-V management tasks. You can create reusable scripts or modules that encapsulate these cmdlets and logic, making it easier to manage your Hyper-V environment consistently across multiple hosts.

  4. Are there any prerequisites for using these cmdlets? To use these cmdlets, you’ll need to have the Hyper-V role or management tools installed on the system you’re running PowerShell from. Additionally, you’ll need appropriate permissions to manage the Hyper-V hosts and virtual machines.

Looking for more? Here are some helpful resources:

Muhammad Faizan

Hi, My name is Muhammad Faizan and i have spent last 15 years working as System Administrator mainly with Microsoft Technologies. I am MCSE, MCTP, MCITP, certified professional. I love scripting and Powershell is the scripting language i am in love with.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button