{"id":879,"date":"2026-10-20T03:00:00","date_gmt":"2026-10-20T03:00:00","guid":{"rendered":"https:\/\/vpslake.com\/blog\/?p=879"},"modified":"2026-10-20T03:00:00","modified_gmt":"2026-10-20T03:00:00","slug":"using-windows-on-kvm-plans","status":"publish","type":"post","link":"https:\/\/vpslake.com\/blog\/2026\/10\/20\/using-windows-on-kvm-plans\/","title":{"rendered":"Using Windows on KVM VPS Plans: Setup Guide"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Using Windows on KVM plans lets you deploy a Windows VPS, complete its first boot from a browser console, and manage it over Remote Desktop. The setup usually takes about 15 minutes when a Windows template is available, or longer when you install from an ISO.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>A VPSLake KVM service with enough RAM, disk, and CPU for your chosen Windows edition and workload; a graphical Windows installation needs more headroom than a minimal server role.<\/li>\n\n\n<li>Client-area access at <code>https:\/\/my.vpslake.com<\/code>, the VPS public IPv4 address, and access to the service&#8217;s <strong>VPS Control Panel (Virtualizor)<\/strong>.<\/li>\n\n\n<li>A Windows template offered for your service, or a licensed Windows ISO and product key if you will install manually. Use only a license you are entitled to use.<\/li>\n\n\n<li>Browser access to the Virtualizor VNC\/console and a separate computer with an RDP client. Keep the console available until the first remote login succeeds.<\/li>\n\n\n<li>Local administrator credentials for the Windows guest. For a Windows VPS with administrator access, see <a href=\"https:\/\/vpslake.com\/buy-windows-rdp\">VPSLake Windows RDP hosting<\/a>.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Open Virtualizor and record the recovery details<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The browser console is your out-of-band access, so collect the address and keep it available before changing the operating system.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Sign in to <code>https:\/\/my.vpslake.com<\/code> and open <strong>Services \u2192 My Services<\/strong>.<\/li>\n\n\n<li>Select the KVM service, choose <strong>Manage<\/strong>, and open <strong>VPS Control Panel<\/strong> to launch Virtualizor.<\/li>\n\n\n<li>Record the public IP, current disk contents, and any DNS or application details you need. A reinstall can erase the virtual disk.<\/li>\n\n\n<li>In Virtualizor, open <strong>Manage \u2192 VNC<\/strong> and confirm that the browser console launches. Do not close this recovery path after Windows is installed.<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">If the control-panel link or VNC action is missing, open a client-area ticket before starting. Do not reboot while a reinstall task is running.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Deploy a Windows template<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A provider template is the quickest route because the image and its virtual hardware drivers are prepared together.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>In Virtualizor, open <strong>Manage \u2192 Reinstall<\/strong>.<\/li>\n\n\n<li>Select the Windows image that matches your license and application requirements. Choose a graphical desktop option when you need local Windows tools; choose Server Core only when you are prepared to administer it without the full desktop.<\/li>\n\n\n<li>Read the erase warning, confirm the reinstall, and wait for the task to report completion before opening VNC.<\/li>\n\n\n<li>Open <strong>Manage \u2192 VNC<\/strong>. Complete the regional setup, accept the license terms, and create a strong local Administrator password. Do not reuse your client-area password.<\/li>\n\n\n<li>Once the desktop appears, open <strong>Settings \u2192 System \u2192 About<\/strong> or <strong>Server Manager \u2192 Local Server<\/strong> and confirm that the installed edition is the one you selected.<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The VPS may be offline while the image is written. Finish the first-boot wizard in VNC before troubleshooting RDP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Install Windows from an ISO when no template is available<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An ISO install gives you control over the edition, but the virtual disk and network adapter may need drivers before Windows can use them.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>In Virtualizor, open the service&#8217;s <strong>CD-ROM\/ISO<\/strong> or <strong>Media<\/strong> screen and mount the Windows ISO. If a VirtIO driver ISO is available in the media list, attach it as a second CD-ROM.<\/li>\n\n\n<li>Power off the VPS from <strong>Power Control<\/strong>, set the boot device to the CD-ROM, and power it on.<\/li>\n\n\n<li>Immediately open <strong>Manage \u2192 VNC<\/strong>. When the console asks whether to boot from the CD\/DVD, press a key inside the VNC window.<\/li>\n\n\n<li>Follow Windows Setup. If no disk is listed, choose <strong>Load driver<\/strong>, browse the attached VirtIO ISO, and select the <code>amd64<\/code> storage-driver folder that matches the Windows release. Continue only after the installer shows the VPS disk.<\/li>\n\n\n<li>Select the unallocated VPS disk, let Setup create its required partitions, and allow the guest to reboot. Remove the ISO or restore the disk-first boot order after Setup no longer needs the media.<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">If the panel does not provide a driver ISO, use the <a href=\"https:\/\/github.com\/virtio-win\/kvm-guest-drivers-windows\" target=\"_blank\" rel=\"noopener\">VirtIO Windows guest-driver repository<\/a>, attach the ISO through the panel, and select the matching signed driver. Never switch the virtual disk controller without its driver installed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Install and check VirtIO drivers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">VirtIO drivers let Windows use the KVM storage and network devices directly instead of relying on slower emulated hardware.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After Windows reaches the desktop, attach the VirtIO ISO if it is not already mounted. If it contains <code>virtio-win-guest-tools.exe<\/code>, run it as Administrator and install the drivers appropriate for the Windows version. Otherwise, update each missing device from <strong>Device Manager \u2192 Other devices \u2192 [device] \u2192 Update driver \u2192 Browse my computer for drivers<\/strong>, selecting the mounted ISO and enabling <strong>Include subfolders<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Restart Windows after the driver installation. Then open an elevated PowerShell window and run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetAdapter | Format-Table Name,Status,LinkSpeed\nGet-Disk | Format-Table Number,FriendlyName,OperationalStatus,Size<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Healthy output contains an enabled network adapter and an online system disk:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Name       Status LinkSpeed\n----       ------ ---------\nEthernet   Up     1 Gbps\n\nNumber FriendlyName       OperationalStatus Size\n------ ------------       ----------------- ----\n0      VirtIO Block Device Online          60 GB<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Names vary by release; confirm network connectivity and no yellow warning icon for storage or networking in Device Manager.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Enable RDP and allow only the required service<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">RDP is commonly disabled on a fresh Windows installation, and the Windows Firewall must allow the listener before an external client can connect.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From <strong>Windows PowerShell \u2192 Run as administrator<\/strong> in VNC, run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$TerminalServerKey = 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server'\nSet-ItemProperty -Path $TerminalServerKey -Name fDenyTSConnections -Value 0\nSet-Service -Name TermService -StartupType Automatic\nStart-Service -Name TermService\nEnable-NetFirewallRule -DisplayGroup 'Remote Desktop'\nGet-ItemProperty -Path $TerminalServerKey -Name fDenyTSConnections\nGet-Service -Name TermService | Select-Object Name,Status,StartType<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The setting should be <code>0<\/code>, and <code>TermService<\/code> should be <code>Running<\/code> with an <code>Automatic<\/code> start type:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fDenyTSConnections : 0\nName        Status  StartType\n----        ------  ---------\nTermService Running Automatic<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The default RDP endpoint is TCP 3389. Microsoft documents the supported GUI and PowerShell methods in its <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-server\/remote\/remote-desktop-services\/clients\/remote-desktop-allow-access\" target=\"_blank\" rel=\"noopener\">Remote Desktop allow-access guide<\/a>. On a non-English Windows installation, enable the rules manually at <strong>Windows Defender Firewall with Advanced Security \u2192 Inbound Rules \u2192 Remote Desktop<\/strong> if the English display-group name is not found.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Activate, update, and create a safer daily login<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Activation, updates, and a separate daily account make the fresh installation safer to operate.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Open <strong>Settings \u2192 System \u2192 Activation<\/strong> and activate with the license supplied for the service or your valid product key. If the VPS uses a provider-managed license, follow the activation instructions in the client area instead of entering a personal key.<\/li>\n\n\n<li>Open <strong>Settings \u2192 Windows Update<\/strong> and install available updates. Reboot when Windows requests it, then reconnect through VNC if RDP is temporarily unavailable.<\/li>\n\n\n<li>Create a named administrator account under <strong>Settings \u2192 Accounts \u2192 Other users \u2192 Add account<\/strong>. Use the built-in Administrator account only when required.<\/li>\n\n\n<li>Restrict the Remote Desktop firewall rule to a trusted source: open <strong>Windows Defender Firewall with Advanced Security \u2192 Inbound Rules \u2192 Remote Desktop \u2192 Properties \u2192 Scope<\/strong>, then add <code>TRUSTED_IP_OR_CIDR<\/code> under <strong>Remote IP addresses<\/strong>.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Verify the Windows KVM VPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check the guest locally, then test the public RDP path from another computer. In elevated PowerShell, run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ComputerInfo -Property WindowsProductName,WindowsVersion,OsBuildNumber\nGet-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.IPAddress -notlike '169.254.*'} | Select-Object IPAddress,InterfaceAlias\nGet-NetTCPConnection -LocalPort 3389 -State Listen | Select-Object LocalAddress,LocalPort,State\ncscript.exe $env:SystemRoot\\System32\\slmgr.vbs \/xpr<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You should see the expected product, a non-link-local IPv4 address, a <code>Listen<\/code> row for port 3389, and an activation dialog or message indicating the license status. From a separate Windows computer, test the public address:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Test-NetConnection -ComputerName SERVER_IP -Port 3389<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>SERVER_IP<\/code> with the public address. Success includes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ComputerName     : SERVER_IP\nRemotePort       : 3389\nTcpTestSucceeded : True<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now open <strong>Remote Desktop Connection<\/strong>, enter <code>SERVER_IP<\/code>, and sign in with the Windows account you configured. Keep VNC open until the desktop loads through RDP.<\/p>\n\n\n\n<aside class=\"vl-element vl-cta-banner\" aria-label=\"Run Windows on KVM\">\n\t<div class=\"vl-cta-banner__content\">\n\t\t<p class=\"vl-cta-banner__eyebrow\">Windows KVM access<\/p>\n\t\t<h3 class=\"vl-cta-banner__title\">Run Windows on KVM<\/h3>\n\t\t<p class=\"vl-cta-banner__text\">Get a Windows VPS with console recovery and administrator access for setup and RDP management.<\/p>\n\t<\/div>\n\t<a class=\"vl-cta-banner__button\" href=\"\/buy-windows-rdp\" aria-label=\"View Windows VPS\">View Windows VPS<\/a>\n<\/aside>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Windows Setup shows no disk<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The installer cannot see a VirtIO storage controller without its driver. Mount the VirtIO ISO, choose <strong>Load driver<\/strong> in the disk-selection screen, select the matching <code>amd64<\/code> storage driver, and rescan. If you cannot attach a driver ISO, ask VPSLake support which media is available for the service rather than changing controller settings at random.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Windows has no network adapter after installation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The NetKVM driver is missing or the virtual adapter is not attached. Install the signed network driver from the VirtIO ISO through <strong>Device Manager<\/strong>, reboot, and check <strong>Virtualizor \u2192 Network<\/strong> for the service&#8217;s assigned interface or IP settings.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>TcpTestSucceeded : False<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Confirm the listener and active-profile firewall rules first. If both pass, inspect any provider-side firewall rule for TCP 3389 and verify <code>SERVER_IP<\/code> is current.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">RDP reaches the server but rejects the login<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The account may have the wrong password, be disabled, or be using a client edition that does not provide an incoming RDP host. Sign in through VNC, reset the password locally, confirm the edition under <strong>Settings \u2192 System \u2192 About<\/strong>, and use the exact local account name. Do not disable Network Level Authentication as a permanent fix.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use any Windows ISO on a KVM VPS?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use an ISO that matches the architecture and edition you are licensed to run, and confirm that the service supports customer-supplied media. A template is simpler because its storage and network drivers are normally prepared for the virtual hardware.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why do I need VNC if I plan to use RDP?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">VNC works before Windows networking and RDP are configured, so it is the recovery path for installation, password setup, driver repair, and firewall mistakes. Keep it available until an external RDP login has succeeded.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is VirtIO required for Windows on KVM?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Windows can sometimes boot with emulated IDE or network hardware, but a VirtIO-backed configuration needs the correct guest drivers. If Windows cannot see the disk or network adapter, load the matching VirtIO storage or NetKVM driver before troubleshooting RDP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does changing the RDP port make Windows secure?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Changing the port can reduce basic scanning but does not replace strong credentials, updates, Network Level Authentication, or source-IP restrictions. If you change it later, update the Windows Firewall rule and test the new address before closing your existing session.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Can I use any Windows ISO on a KVM VPS?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Use an ISO that matches the architecture and edition you are licensed to run, and confirm that the service supports customer-supplied media. A template is simpler because its storage and network drivers are normally prepared for the virtual hardware.\"}}, {\"@type\": \"Question\", \"name\": \"Why do I need VNC if I plan to use RDP?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"VNC works before Windows networking and RDP are configured, so it is the recovery path for installation, password setup, driver repair, and firewall mistakes. Keep it available until an external RDP login has succeeded.\"}}, {\"@type\": \"Question\", \"name\": \"Is VirtIO required for Windows on KVM?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Windows can sometimes boot with emulated IDE or network hardware, but a VirtIO-backed configuration needs the correct guest drivers. If Windows cannot see the disk or network adapter, load the matching VirtIO storage or NetKVM driver before troubleshooting RDP.\"}}, {\"@type\": \"Question\", \"name\": \"Does changing the RDP port make Windows secure?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Changing the port can reduce basic scanning but does not replace strong credentials, updates, Network Level Authentication, or source-IP restrictions. If you change it later, update the Windows Firewall rule and test the new address before closing your existing session.\"}}]}<\/script>\n\n","protected":false},"excerpt":{"rendered":"Using Windows on KVM plans? Deploy from Virtualizor or an ISO, finish setup in VNC, install VirtIO drivers, enable RDP, and secure your VPS.","protected":false},"author":1,"featured_media":880,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","footnotes":""},"categories":[5,11],"tags":[90,32,78,68,56],"class_list":["post-879","post","type-post","status-publish","format-standard","has-post-thumbnail","category-guides","category-windows-server","tag-kvm","tag-rdp","tag-virtio","tag-vps","tag-windows","cs-entry"],"_links":{"self":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/879","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/comments?post=879"}],"version-history":[{"count":1,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/879\/revisions"}],"predecessor-version":[{"id":3650,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/879\/revisions\/3650"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media\/880"}],"wp:attachment":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media?parent=879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/categories?post=879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/tags?post=879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}