In this blog, I gonna draft a solution for you to install any Windows OS on the Vultr cloud server.

Before starting

Before starting, there are several points about why I choose Vultr and why you need to build a Windows 11 image on Vultr.

https://www.vultr.com/?ref=9089022-8H

(If you register Vultr in the link above, you will get 100$ for free. Why?)

Vultr is cheap

Compared with other cloud service providers, Vultr is cheap. A 4GB RAM, 80GB SSD machine, costs about 24USD per month. While other platforms usually cost about 50USD.

Vultr provides VNC connection

When I was using Azure, I can't get a VNC connection. This means that sometimes I blocked myself using Firewall, and I can never get a chance to come back. The only choice left seems to be reimaging the server.

While Vultr provides VNC allows you to debug\fix\reimage your server with the last chance. And our solution to reimage Vultr is based on the VNC connection (You can't have RDP ready while installing Windows)

Desktop Experience

It's really a bad idea that you can't install Desktop Experience on a Windows server. Sometimes I just want to use something like Winget or Windows Terminal, I have no option on Windows Server.

Sometimes I need more desktop experience to do some experiments like installing some unknown software. Windows server provides a real bad experience for that.

Also, this provides me an option to run Windows 11 apps with an Android phone.

Use it in business

As for business admins, desktop computing on the cloud provides the option to unify the management of all employee's work environments and allows them to work anywhere, on any device, with any unified experience.

Allows you to code on iPad\Chromebook

While I have a Chromebook, I really wish I can code on it. Currently, the only solution is to use GitHub codespace. But what I really need is a real environment that allows me to see my built stuff.

With a Windows 11 Cloud PC, you can focus on devices as a remote desktop client. This means that you can turn your old iPad into a development endpoint.

Brief context

To save money, we shouldn't buy a Windows Server from Vultr directly. For that costs a lot of Windows license fees. Since you may already have the Windows 11 or Windows Server license, to avoid paying it again, you can use Vultr's custom ISO feature, to buy a raw server with OS, and install an OS on your own.

With your own OS ready, you can use diskpart to manage disks. And you can download new OS images, and use dism to unzip them. And you can use bcdedit to modify the boot configuration so you can boot your customized OS.

Don't forget, Windows doesn't natively support Vultr's driver. You also need to inject those necessary drivers to your OS.

Step 1 - Build your own Windows Server ISO file (option)

This step is optional. If you don't have the time, you can directly skip Step 1 and use Vultr's official Windows Server 2022 Image.

This will save the license fee of Windows Server. Vultr will treat your server as Custom OS instead of Windows.

And don't forget, due to compliance issues, you always need to buy Windows 11 on your own. And after installing Windows 11 on Vultr, you always need to activate it.

Follow the instructions here to create your Windows Server ISO: Windows Custom ISO with VirtIO Drivers - Vultr.com

Step 2 - Create a new Windows Server 2022 machine

Buy a new Windows server instance. On the location near you.

If you have Step 1 ready, you need to create it with your own ISO.

If you skipped step 1, you need to buy a new Windows Server 2022 with desktop experience from Vultr directly. This means you need to pay for your Windows Server! Even you install Windows 11 on it.

Select the one With Desktop Experience!

Buy a server with at least 4GB RAM and a 70GB SSD. Or you will have a really bad Windows 11 desktop experience!

Step 3 - Download aria2 and Windows 11 ISO on the new server

First, log in to your server. With RDP or VNC.

Open browser to download aria2.

Release aria2 1.36.0 · aria2/aria2 · GitHub

Do this on your remote server, not your local box!

Unzip it after downloading:

After unzipping, open a PowerShell here:

Run the following command in the PowerShell window:

Start-Process powershell {
		Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://githubcontent.aiurs.co/pbatard/Fido/master/Fido.ps1'))
}

Now download the latest Windows 11 x64.

Copy the download link, and cancel the download immediatly.

When you have the latest Windows 11 download link, download it with aria2 now.

Run command:

    .\aria2c.exe "https://your-download-link"

Using aria2c to download is way faster than a browser.

After downloading, you can see the iso file.

Step 4 - Get the install.wim file

The only file necessary for installation is the install.wim file.

Now in this step, we need to get it.

First, Double click the iso to mount it.

Go to the source folder. Find the install.wim file. Copy it to C:\install.wim

Copy it to C:\\install.wim.

The old iso file is useless now. You can unmount the iso and delete the iso.

Delete those iso and aria2c files. Those are useless now.

You must delete those files to save disk space! We need to shrink the disk later!

Step 5 - Inject necessary drivers

Download necessary drivers first:

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

Download the iso on your server! Not your local box!

Double click to mount it as E.

Now open a new PowerShell session with Admin.

Run the following command to get your preferred system index.

dism /Get-ImageInfo /imagefile:"C:\install.wim"

For example, I want to install Windows 11 Pro. Then I need to remember the index: 6.

Now run the following commands to mount the system.

Remember: The index number should be your preferred OS index! I use 6 here as an example.

cd C:\
mkdir win11_temp
Dism /Mount-Image /ImageFile:C:\install.wim /MountDir:C:\win11_temp /Index:6

After mounting, don't touch those mounted files!

Inject the necessary drivers now. (You just mounted the Vultr drivers as E:\)

Run the following command:

Dism /Image:C:\win11_temp /Add-Driver /Driver:E:\ /Recurse

You may see some errors. Those are not necessary. Just ignore them. Most of the drivers are installed.

Now, commit the changes to the wim file.

Dism /Unmount-Image /MountDir:C:\win11_temp /Commit

When running the command, close all file explorer windows. Don't use your terminal to change the directory to the mounted folder! We need to make sure dism can successfully delete those mounted file or there will be an error.

After unmounting, double-check the wim file's modification time is around 2 minutes earlier from now.

Step 6 - Prepare for Windows 11 installation.

Now, we have our installation wim file. We need to prepare a new clean drive for Windows 11 to install.

First, delete all downloaded files to save disk space. Go to disk management.

Shrink the C disk:

Use max shrink value.

And create a new part for the shrinked disk space:

And now you have a clean E drive. We will install Windows 11 here.

Step 7 - Unzip Windows 11

Now, time to Unzip Windows. First, start a new PowerShell session and go to C:\

Run the following command to format disk E:

Format-Volume -DriveLetter E -FileSystem NTFS

Now unzip the install.wim to E:.

Do you still remember the index of your OS? I use 6 here as an example. You can check that with 

dism /Get-ImageInfo /imagefile:"C:\install.wim"

When you have the index, unzip it now:

dism /apply-image /imagefile:"C:\install.wim" /index:"6" /ApplyDir:"E:\"

This step will install the install.wim to E. It costs about 3 minutes.

Step 8 - Setup Windows 11 boot configuration

Run the following PowerShell to create a new boot entry:

$created = bcdedit /create /d "Windows 11" /application osloader

Run the following PowerShell to get the OS ID:

$osID = $created | Select-String -Pattern '{[-0-9A-F]+?}' -AllMatches | Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value

Since you have the OSID, run the following PowerShell:

$diskMount = "E"
bcdedit /set "$osID" device "partition=$($diskMount):"
bcdedit /set "$osID" path "\WINDOWS\system32\winload.exe"
bcdedit /set "$osID" systemroot "\WINDOWS"
bcdedit /set "$osID" osdevice "partition=$($diskMount):"
bcdedit /set "$osID" locale "en-US"
bcdedit /set "$osID" inherit "{bootloadersettings}"
bcdedit /set "$osID" nx "OptIn"
bcdedit /set "$osID" bootmenupolicy "Standard"
bcdedit /set "$osID" displaymessageoverride "Recovery"
bcdedit /set "$osID" recoveryenabled "Yes"
bcdedit /set "$osID" isolatedcontext "Yes"
bcdedit /set "$osID" flightsigning "Yes"
bcdedit /set "$osID" allowedinmemorysettings "0x15000075"
bcdedit /displayorder "$osID" /addlast
bcdedit /set "{bootmgr}" default "$osID"

After running, you may see some success messages. And you can run bcdedit to verify your settings.

Now reboot directly.

After rebooting, VNC is the only option to connect to the server.

Step 9 - Finish OOBE

Click "View console" to connect via VNC:

If all steps are correct, you will see Windows 11 booting and goes to OOBE page:

If you see a bluescreen here, usually is because there is something wrong with the drivers. You need to start-over again, to install all necessary drivers.

We need to bypass Microsoft's live account sign-in. Because once you sign in with your live account, you won't be able to use the remote desktop!

Name your PC first.

Select personal account:

And then select sign in options:

Select offline account:

Name it as Default. Because you need to first get a clean Windows 11 image. Leave everything as default. And change those later. So you can build new Windows 11 Clooud PCs later.

Give it a strong password! Do NOT skip this step! The password needs to be used if you want to use RDP.

Wait for about 3 minutes and you can see desktop.

And success!

Now enable RDP service. Go to system settings.

Enable Remote Desktop.

And now, try to connect with RDP!

Big success!

Now you have your own cloud PC now!

Step 10 - Delete old Windows Server

Since you have new Windows 11 Cloud PC ready, you can delete the old Windows Server now.

Directly format the disk D is ok.

And it is suggested to change your remote desktop port away from 3389.

Follow the instructions here: Change the listening port in Remote Desktop | Microsoft Docs

Step 11 - Save it, Share it!

Do make a snapshot for your new cloud PC ASAP!

And once you have the snapshot, you can create more and more cloud PCs for your family and friends. So they all could have a ready-to-use Windows 11. Anywhere can access, from any device!

Cloud PC future coming!