I like VirtualBox because there is a well-documented command line API (vboxmanage) that is available for Windows and Linux. There is a vboxheadless command you can use to run VM's in the background.
You'll have to install VirtualBox yourself on Windows first, and make VBoxManage executable from the windows command line or powershell
You can use
vboxheadless startvm $name
after you run the following commands (without the commented parts).
# Use VBoxManage to create a VirtualBox VM from an evaluation copy of Windows 10
# Enterprise ISO.
# Follow the download instructions for your region at
#
# https://www.microsoft.com/en-us/evalcenter/download-windows-10-enterprise
#
# Create a virtual machine named "windows-10-enterprise-bob" from and ISO
name=windows-10-enterprise-bob
vboxmanage createvm --name $name --ostype Windows10_64 --register --basefolder `pwd`
# Turn on IO APIC
vboxmanage modifyvm $name --ioapic on
# Designate RAM size and video RAM size
vboxmanage modifyvm $name --memory 4096 --vram 128
# Create an internal network interface connected to the internal network named
# RedTeamLab
vboxmanage modifyvm $name --nic1 intnet --intnet1 RedTeamLab
# Put the network interface in promiscuous mode
vboxmanage modifyvm $name --nicpromisc1 allow-all
vboxmanage createhd --filename `pwd`/$name/$name_DISK.vdi --size 60000 --format VDI
vboxmanage storagectl $name --name 'SATA Controller' --add sata --controller IntelAhci
vboxmanage storageattach $name --storagectl 'SATA Controller' --port 0 --device 0 --type hdd --medium `pwd`/$name/$name_DISK.vdi
vboxmanage storagectl $name --name 'IDE Controller' --add ide --controller PIIX4
vboxmanage storageattach $name --storagectl 'IDE Controller' --port 1 --device 0 --type dvddrive --medium `pwd`/windows-10-enterprise.iso
vboxmanage modifyvm $name --boot1 dvd --boot2 disk --boot3 none --boot4 none