There are several ways to create VMs on Hyper-V virtualization hosts. The standard approach is to use Hyper-V Manager...
or System Center Virtual Machine Manager. However, many administrators like to use PowerShell cmdlets to quickly provision Hyper-V VMs. PowerShell is a very useful tool for when you need to deploy Hyper-V VMs in a development environment or when you need to perform VM creation tasks repeatedly.
Create Hyper-V VMs using Hyper-V Manager
Most Hyper-V administrators are familiar with the VM creation process using Hyper-V Manager. All you need to do is open Hyper-V Manager, right-click on a Hyper-V host in the list of available hosts, click on the New action, click on the Virtual Machine action and then follow the steps on the screen to create the VM. You'll need to specify parameters, like VM name, VM generation and the path to store VM files.
Create Hyper-V VMs using SCVMM
Deploying VMs using System Center Virtual Machine Manager (SCVMM) is fairly simple. You can deploy VMs on a standalone Hyper-V host or in a Hyper-V cluster. You need to go to the VMs and Services workspace, right-click on a SCVMM host group and then click on the Create Virtual Machine action, as shown in Figure A below:
When you click on the Create Virtual Machine action, SCVMM will open a wizard. All you need to do is follow the steps on the screen. One of the main advantages of SCVMM is that it allows you to configure VM parameters -- including Dynamic Memory -- before the actual creation process starts. Another benefit of using SCVMM is that you can quickly provision a VM by selecting a SCVMM template that already includes the required VM settings. SCVMM also provides greater flexibility when deploying VMs in a production environment.
When you provision VMs using SCVMM, SCVMM creates a PowerShell script on the fly and then executes it via the SCVMM job window. If you need to use the PowerShell script where SCVMM isn't installed, you can copy the PowerShell script from the SCVMM job window and modify the Hyper-V host-related parameters.
Create Hyper-V VMs using PowerShell
Hyper-V offers the New-VM PowerShell cmdlet that can be used to create a VM on a local or remote Hyper-V host. It's important to note that, before creating Hyper-V VMs using PowerShell, you'll need to make some configuration decisions, as explained below:
- Figure out the Hyper-V virtual switch to which the VM will be connected. You can get Hyper-V virtual switch names by executing the Get-VMSwitch * | Format-Table Name PowerShell command. The command will list all the Hyper-V virtual switches on the local Hyper-V host. Copy the Hyper-V virtual switch name to be used in the VM creation command.
- Decide the type of memory configuration for the new VM. Are you planning to use static memory or Dynamic Memory? If you plan to use the Dynamic Memory feature, you'll need to use the Set-VMMemory PowerShell cmdlet after creating the VM.
- Identify the VM file path where VM files will be stored. It can be a local path, a path to the Cluster Shared Volumes disk in the Hyper-V cluster or a path to the Scale-Out File Server cluster.
- Decide if you'd like the OS in the VM to be installed via a Preboot Execution Environment server running on the network or if you'd like to set up the OS from a DVD. Depending on the OS deployment type, you'd want to change the boot order of the VM.
- Are you going to create a new VM on a local or remote Hyper-V host? If you're going to create a VM on a remote Hyper-V host, get the Hyper-V server's fully qualified domain name or IP address, and specify that value using the -ComputerName parameter in the New-VM PowerShell cmdlet.
- Choose the generation of the VM. Generation 2 VMs provide new features, such as guest clustering, Hyper-V virtual hard disk (VHDX) online resizing, secure boot, fast boot and so on. I recommend you choose Generation 2 unless you have a reason to go for Generation 1 VMs.
Once you have gathered the required parameters for the new VM, use the PowerShell command below to create the VM on the Hyper-V host.
New-VM –Name SQLVM –MemoryStartupBytes 8GB –BootDevice VHD –VHDPath C:\ProductionVMs\SQLVM.VHDX –Path C:\ProductionVMs\VMFiles –Generation 2 –Switch ProductionSwitch
This command will create a VM by the name of the SQLVM on the local Hyper-V host. The new VM will be configured to use 8 GB of memory and will be stored in the C:\ProductionVMs folder. Note that -Generation 2 specifies that this VM will be created as a Generation 2 VM. If you want to change the new VM's memory configuration from static to Dynamic Memory, use the PowerShell command below:
Stop-VM –Name SQLVM
Set-VMMemory SQLVM –DynamicMemoryEnabled $True –MinimumBytes 250MB –StartupBytes 500MB –MaximumBytes 8GB –Priority 70 –Buffer 20
These commands configure the SQLVM with Dynamic Memory and set the required parameters for Dynamic Memory.
Upgrade Hyper-V VM configuration version
Learn more Hyper-V PowerShell commands