Back in 2017, I was curious about whether Windows Server could be a viable OS for a desktop user. I looked for some documentation on the subject, and mostly turned up a bunch of low quality resources. As such, I went down the rabbit hole and ended up with a detailed post about my discoveries.
The post proved to be one of the more popular on the blog, so I’ve recently repeated the exercise in an effort to keep the information up-to-date.
Firstly, there are many reasons why this is a bad idea, and to reiterate some of them:
- No Windows Store / Package Manager. You won’t be able to easily get and update UWP apps using native methods.
- Windows Server licenses are expensive. Definitely don’t consider buying a license just to do this, it is totally not worth it.
- Troubleshooting the occasional application that misbehaves can be really time consuming.
- You can’t MDM manage the device, or join an Azure AD domain.
Installing the OS
You can install the OS in any of the typical ways you would for a Windows 10/11 client. I use MDT for this, since I’m insane, but a quick and easy way is to use Rufus to make a bootable install on USB flash media, using the Server 2022 ISO. In my experience, there are enough in-box drivers present for you to install the OS with no major hassles.
A small number of Intel network adaptors will have issues because some dickheads friendly folks over at Intel decided to intentionally break support for these devices by excluding the device identifiers from their driver only when the OS is Windows Server. On affected systems (like Intel NUC), I have worked around this by fixing the driver INF, generating a new catalogue file, and then signing it with my own certificate. I recommend you check if your network adaptor is supported before doing the install.
Configuring the system
From here on you can configure the system like a workstation using PowerShell alone. I’ve covered off the typical things that I change, but be aware that the defaults for a whole range of settings in Windows Server are different to a Windows client OS.
First, I create a local user account, add it to the administrators group, and then disable the built-in Administrator account:
New-LocalUser -FullName 'Pebkac.io' -Name 'pebkac' -PasswordNeverExpires
Add-LocalGroupMember -Group 'Administrators' -Member 'pebkac'
Disable-LocalUser -Name 'Administrator'
logoff
(Yes, it’s 2023 and there’s still no cmdlet to log off the computer.)
After logging into the new account, you’ll have UAC behaving per the Windows 10/11 defaults, so you’ll have to explictly launch an elevated PowerShell to do any heavy lifting.
The Server Manager app is set to automatically open at login for all users, with a Scheduled Task. You can turn that off without needing to use its shitty UI:
Get-ScheduledTask -TaskName 'ServerManager' | Disable-ScheduledTask
Since processor scheduling is defaulted to Background Services in Windows Server, I change this to the Programs setting.
You can change this setting in the registry as follows:
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\PriorityControl' -Name 'Win32PrioritySeparation' -Value 38
A value of 38 is equivalent to setting the Programs radio button.
Desktop composition effects get pretty crippled out of the box, with sensible defaults for a server:
You can change this setting in the registry as well. A value of 1 is equivalent to selecting the Adjust for best appearance radio button.
Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects' -Name 'VisualFXSetting' -Value 1
The Shutdown Event Tracker is enabled by default, annoying you with this at system shutdown:
Typically people seem to want to disable this with the Local Group Policy editor, but I go straight to the registry:
New-Item -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT' -Name 'Reliability'
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability' -Name 'ShutdownReasonOn' -Value 0
I personally have no qualms about pressing Ctrl+Alt+Delete at the welcome/login screen, but if you want to switch that off:
Set-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System' -Name 'DisableCAD' -Value 1
Windows 10/11 also enables Memory Compression by default, but to get it in Server you’ll need to run:
Enable-MMAgent -mc
I’d recommend deploying at least the chipset driver for your platform from the manufacturer’s site. In the case of AM4/AM5 chipsets, the installation program will refuse to proceed after a certain point, but you can usually find all the drivers extracted into C:\AMD
.
What’s missing?
A non-exhaustive list:
- Windows Store
- Many in-box Appx packages
- Azure AD Join (Windows Server only supports Hybrid Join)
- MDM Support
- System Restore
- Windows Spotlight
- Windows Mixed Reality
- Windows Hello
- Game Mode
- Auto HDR
- Windows 11 style visual refresh
What about gaming?
DirectX 12 is there. Vulkan installs and works fine. Nvidia/AMD drivers, GeForce Experience, and Steam all work fine.
Performance wise it seems close to the Windows 10 client, but my testing hasn’t been robust. Depending on your specific hardware and drivers, your results may vary.
Quality of life improvements
- I typically deploy Quick Picture Viewer and MPC-HC for media viewing.
- 7-Zip or the zstd fork of it is a much more fully featured archiver. (Although I wish the authors would sign their binaries)