If you’ve spent your career in VMware land, Hyper-V on Server Core can feel alien at first. No GUI. No vCenter. Just a blinking command prompt and PowerShell. But once you get past the initial discomfort, you’ll find that Server Core is exactly how a hypervisor should run — lean, minimal attack surface, and nothing competing with your workloads for resources.
This post walks through the entire process: taking a fresh Windows Server 2025 Server Core install, configuring Hyper-V, and deploying a Red Hat Enterprise Linux 9 VM from an ISO. Every step is done from the command line.
Prerequisites
Before you start, make sure your hardware has:
- Intel VT-x or AMD-V enabled in BIOS/UEFI
- SLAT (Second Level Address Translation) — EPT on Intel, RVI on AMD
- At least two NICs recommended (one for management, one for VM traffic)
- Sufficient storage — at least 100 GB free for VM files
- Windows Server 2025 Standard or Datacenter installed in Server Core mode (no Desktop Experience)
If you’re not sure whether virtualization extensions are enabled, you’ll find out quickly — the Hyper-V role won’t install without them.
Part 1: Initial Server Core Configuration
When you first boot into Server Core, you’ll see a command prompt window and the Server Configuration tool (sconfig) may launch automatically. If it doesn’t, type sconfig and press Enter.
Set the basics with sconfig
Use sconfig to handle the initial networking and identity:
- Computer Name — option 2. Set something meaningful like
HV-LAB-01 - Network Settings — option 8. Configure a static IP on your management NIC
- Windows Update — option 6. Set to manual for now (you’ll patch deliberately)
- Remote Desktop — option 7. Enable it (you’ll want this for remote management)
- Date/Time — option 9. Verify timezone
After setting the computer name, the server will prompt for a reboot. Let it restart.
Enable remote management
Once you’re back in, open PowerShell (type powershell at the command prompt):
# Verify PowerShell remoting is enabled (should be by default on Server Core)
Enable-PSRemoting -Force
# Allow WinRM connections from your management workstation
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "YOUR_WORKSTATION_IP" -Force
# If you want to manage this server from Windows Admin Center or Hyper-V Manager
# on another machine, enable the firewall rules:
Enable-NetFirewallRule -DisplayGroup "Remote Event Log Management"
Enable-NetFirewallRule -DisplayGroup "Remote Volume Management"
Enable-NetFirewallRule -DisplayGroup "Windows Remote Management"
Part 2: Install the Hyper-V Role
This is where it gets real. One command:
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
The -IncludeManagementTools flag installs the Hyper-V PowerShell module, which is how you’ll manage everything on Server Core. The server will reboot automatically.
After reboot, verify the installation:
Get-WindowsFeature Hyper-V
# You should see:
# Display Name Name Install State
# ------------ ---- -------------
# [X] Hyper-V Hyper-V Installed
Also verify the Hyper-V PowerShell module loaded:
Get-Command -Module Hyper-V | Measure-Object
# Should return 200+ commands
Part 3: Configure Storage Paths
Before creating any VMs, set up a clean directory structure. Don’t dump everything in C:\. Ideally you’d have a separate disk or volume, but even on a single disk, keep things organized:
# Create the directory structure
New-Item -Path "D:\Hyper-V\Virtual Machines" -ItemType Directory -Force
New-Item -Path "D:\Hyper-V\Virtual Hard Disks" -ItemType Directory -Force
New-Item -Path "D:\Hyper-V\ISO" -ItemType Directory -Force
# Set the default paths for Hyper-V
Set-VMHost -VirtualMachinePath "D:\Hyper-V\Virtual Machines"
Set-VMHost -VirtualHardDiskPath "D:\Hyper-V\Virtual Hard Disks"
If you only have a C: drive, substitute C:\Hyper-V — but in production, always separate your VM storage from the OS volume.
Verify the configuration:
Get-VMHost | Select-Object VirtualMachinePath, VirtualHardDiskPath
Part 4: Create a Virtual Switch
VMs need network connectivity, and that starts with a virtual switch. You have three types:
- External — bridges to a physical NIC (VMs can reach the network)
- Internal — communication between host and VMs only
- Private — communication between VMs only
For a lab where you want VMs to reach the network and be reachable:
# First, find your physical NICs
Get-NetAdapter
# You'll see something like:
# Name InterfaceDescription Status LinkSpeed
# ---- -------------------- ------ ---------
# Ethernet0 Intel(R) I350 Gigabit #1 Up 1 Gbps
# Ethernet1 Intel(R) I350 Gigabit #2 Up 1 Gbps
Create an external virtual switch bound to your VM traffic NIC:
# Create the external switch
# -AllowManagementOS $true lets the host also use this NIC (fine for lab, not ideal for production)
New-VMSwitch -Name "vSwitch-External" `
-NetAdapterName "Ethernet1" `
-AllowManagementOS $true `
-Notes "External switch for VM network traffic"
Important: If you only have one NIC, use -AllowManagementOS $true or you’ll lose remote connectivity to the host the moment you create the switch. With two NICs, keep your management NIC untouched and bind the switch to the second NIC.
Verify:
Get-VMSwitch
# Name SwitchType NetAdapterInterfaceDescription
# ---- ---------- ------------------------------
# vSwitch-External External Intel(R) I350 Gigabit #2
Part 5: Configure Host Settings
A few additional host-level settings worth configuring:
# Enable enhanced session mode (useful for console access)
Set-VMHost -EnableEnhancedSessionMode $true
# Set NUMA spanning (enable for mixed workloads, disable for performance-critical VMs)
Set-VMHost -NumaSpanningEnabled $true
# View the full host configuration
Get-VMHost | Format-List *
At this point, your Hyper-V host is ready to run VMs. Let’s deploy one.
Part 6: Download the RHEL 9 ISO
Red Hat provides free developer subscriptions that include RHEL ISO downloads. If you don’t have one:
- Go to developers.redhat.com
- Create a free Red Hat account
- Navigate to Downloads → Red Hat Enterprise Linux
- Download the RHEL 9.x Binary DVD ISO (the full ~9 GB ISO, not the boot ISO)
Transfer the ISO to your Hyper-V host. From your workstation, you can use a simple SMB copy, or if you have direct access:
# On the Hyper-V host, create an SMB share for easy file transfer
New-SmbShare -Name "HyperV-ISO" -Path "D:\Hyper-V\ISO" -FullAccess "Administrators"
# From your workstation, copy the ISO:
# Copy-Item "C:\Downloads\rhel-9.4-x86_64-dvd.iso" "\\HV-LAB-01\HyperV-ISO\"
Or if you have the ISO URL and want to download directly on the server:
# Start a background transfer (Server Core has BITS)
Start-BitsTransfer -Source "https://your-download-url/rhel-9.4-x86_64-dvd.iso" `
-Destination "D:\Hyper-V\ISO\rhel-9.4-x86_64-dvd.iso"
Verify the ISO is in place:
Get-ChildItem "D:\Hyper-V\ISO"
Part 7: Create the RHEL Virtual Machine
Now the fun part. We’ll create a Generation 2 VM (UEFI-based, required for modern Linux distros):
# Create the VM
New-VM -Name "RHEL9-01" `
-MemoryStartupBytes 4GB `
-Generation 2 `
-NewVHDPath "D:\Hyper-V\Virtual Hard Disks\RHEL9-01.vhdx" `
-NewVHDSizeBytes 60GB `
-SwitchName "vSwitch-External"
Configure VM settings
# Set processor count
Set-VMProcessor -VMName "RHEL9-01" -Count 4
# Enable dynamic memory (optional — good for lab use)
Set-VMMemory -VMName "RHEL9-01" `
-DynamicMemoryEnabled $true `
-MinimumBytes 2GB `
-MaximumBytes 8GB `
-StartupBytes 4GB
# Disable Secure Boot OR set it to Microsoft UEFI Certificate Authority
# (Standard "Microsoft Windows" secure boot template won't boot Linux)
Set-VMFirmware -VMName "RHEL9-01" `
-SecureBootTemplate "MicrosoftUEFICertificateAuthority"
The Secure Boot setting is critical. Generation 2 VMs have Secure Boot enabled by default with the “Microsoft Windows” template. RHEL will refuse to boot with that template. You either need to switch it to MicrosoftUEFICertificateAuthority (which supports signed Linux bootloaders) or disable Secure Boot entirely:
# Alternative: disable Secure Boot completely
# Set-VMFirmware -VMName "RHEL9-01" -EnableSecureBoot Off
Mount the ISO
# Attach the RHEL ISO to the VM's DVD drive
Add-VMDvdDrive -VMName "RHEL9-01" -Path "D:\Hyper-V\ISO\rhel-9.4-x86_64-dvd.iso"
# Set the boot order — DVD first, then hard disk
$dvd = Get-VMDvdDrive -VMName "RHEL9-01"
$hdd = Get-VMHardDiskDrive -VMName "RHEL9-01"
Set-VMFirmware -VMName "RHEL9-01" -BootOrder $dvd, $hdd
Enable guest services
# Enable integration services for file copy, heartbeat, time sync
Enable-VMIntegrationService -VMName "RHEL9-01" -Name "Guest Service Interface"
Review the VM configuration
Get-VM -Name "RHEL9-01" | Format-List *
Get-VMProcessor -VMName "RHEL9-01"
Get-VMMemory -VMName "RHEL9-01"
Get-VMNetworkAdapter -VMName "RHEL9-01"
Get-VMFirmware -VMName "RHEL9-01"
Part 8: Install RHEL 9
Start the VM and connect to its console:
Start-VM -Name "RHEL9-01"
# Connect to the VM console
# (This opens a VMConnect window if you have RDP to the host,
# or you can use PowerShell Direct for headless installs)
vmconnect.exe localhost "RHEL9-01"
If you’re managing remotely and can’t use vmconnect, use Hyper-V Manager from your workstation:
# On your Windows workstation, open Hyper-V Manager and connect to the remote host:
# mmc.exe virtmgmt.msc
# Or use Windows Admin Center in a browser
Walk through the RHEL installer
The Anaconda installer should boot. Key settings to configure:
- Language — select your preferred language
- Installation Destination — select the 60 GB virtual disk, use automatic partitioning
- Software Selection — choose Minimal Install for a server (or Server with GUI if you want a desktop)
- Network & Hostname — enable the network adapter (it should get DHCP from your network through the external switch). Set hostname to something like
rhel9-lab-01 - Root Password — set a strong root password
- Create User — create a non-root user and grant admin privileges
- Click Begin Installation
The install takes about 10-15 minutes. When complete, click Reboot System.
Part 9: Post-Install Configuration
After reboot, remove the ISO so the VM boots from disk:
# Remove the DVD drive (or just remove the ISO)
Remove-VMDvdDrive -VMName "RHEL9-01" -ControllerNumber 0 -ControllerLocation 1
# Or just eject the ISO:
# Set-VMDvdDrive -VMName "RHEL9-01" -Path $null
Verify Hyper-V integration services on the RHEL guest
SSH into your new RHEL VM (or use the console) and verify the Hyper-V drivers are loaded:
# Check that Hyper-V modules are loaded
lsmod | grep hv
# You should see:
# hv_vmbus
# hv_storvsc
# hv_netvsc
# hv_utils
# hv_balloon (if dynamic memory is enabled)
RHEL 9 includes Hyper-V integration services (LIS) in the kernel — no additional driver installation needed.
Install the hyperv-daemons package
# This provides KVP, VSS, and file copy daemons
sudo dnf install -y hyperv-daemons
# Enable and start the services
sudo systemctl enable --now hypervkvpd
sudo systemctl enable --now hypervvssd
Register with Red Hat (for updates)
sudo subscription-manager register --username YOUR_RH_USERNAME --password YOUR_RH_PASSWORD
sudo subscription-manager attach --auto
sudo dnf update -y
Verify networking
ip addr show
ping -c 4 8.8.8.8
Part 10: Managing VMs Day-to-Day
Here are the PowerShell commands you’ll use constantly:
# List all VMs and their state
Get-VM
# Start / stop / restart
Start-VM -Name "RHEL9-01"
Stop-VM -Name "RHEL9-01"
Restart-VM -Name "RHEL9-01"
# Graceful shutdown (requires integration services)
Stop-VM -Name "RHEL9-01" -Force:$false
# Take a checkpoint (snapshot)
Checkpoint-VM -VMName "RHEL9-01" -SnapshotName "Post-install clean state"
# List checkpoints
Get-VMCheckpoint -VMName "RHEL9-01"
# Restore a checkpoint
Restore-VMCheckpoint -VMName "RHEL9-01" -Name "Post-install clean state" -Confirm:$false
# Export a VM (for backup/migration)
Export-VM -Name "RHEL9-01" -Path "D:\Hyper-V\Exports"
# Live resource monitoring
Get-VM -Name "RHEL9-01" | Select-Object Name, State, CPUUsage, `
@{N='MemoryAssigned(GB)';E={[math]::Round($_.MemoryAssigned/1GB,2)}}, `
Uptime, Status
Wrapping Up
That’s a complete Hyper-V deployment on Server Core — from bare metal to a running RHEL 9 VM. The whole process takes about an hour if you don’t count the ISO download time.
A few things that surprised me coming from the VMware world: the PowerShell management experience is genuinely good. Once you have your commands down, creating and configuring VMs is faster from the command line than clicking through any GUI wizard. The Hyper-V module has over 200 cmdlets covering everything from live migration to resource metering.
For a lab environment or a small deployment, this is an incredibly cost-effective setup. You’re running a Type 1 hypervisor that’s included with your Windows Server license, on an OS footprint that’s a fraction of the size of a Desktop Experience install.
In a follow-up post, I’ll cover setting up a multi-VM lab environment with internal networking, DHCP, and automated provisioning using PowerShell scripts.