Deploying Windows 11 on Arm Devices – Jurassic Deployment Style

I recently bought a machine capable of running Windows 11 on Arm, The Windows Dev Kit 2023 aka Project Volterra. Now, since neither MDT nor ConfigMgr support Windows deployment on Arm devices, in this post you find a quick and dirty solution that takes us back to the Jurassic era, before OSD was cool 🙂

The Windows Dev Kit 2023 aka Project Volterra

To deploy Windows 11 on Arm Devices I used a PowerShell version of my batch script used in my previous Jurassic Deployment post: A Blast From The Past – Jurassic Deployment

Update January 12, 2023: Added link to Dev Kit 2023 Recovery Image. See the Recovery section in the end of the post.

The solution has three steps

  • Create a WinPE 11 for Arm boot image
  • Creating a Deployment Share for Windows 11 for Arm Deployments
  • Start the deployment

Adding PowerShell to WinPE 11 for Arm

While there are optional WinPE optional components for PowerShell to WinPE for Arm, they absolutely do not work, since WinPE on Arm, unlike Windows on Arm, can't run any x64 code. That fact also stops us from using task sequences since they are also x64 binaries. However, PowerShell 7 for Arm run decently on WinPE for Arm. Below is a script that creates a WinPE 11 for Arm ISO with PowerShell 7. The only requirements are that you have Windows ADK for Windows 11 21H2 or Windows ADK for Windows 11 22H2 installed on your machine, and that you have downloaded PowerShell 7 for Arm. I used version 7.2.7 when testing this.

WinPE 11 for Arm with PowerShell 7

Create a Deployment Share

The next step is to create a shared folder, to which you add your Windows 11 Enterprise arm64 image. Simply download the Windows 11 Enterprise for Arm64 ISO from VLSC and extract the WIM file.

Note: Windows 11 Enterprise for Arm64 is also available inside the Windows 11 IoT Enterprise ISO that is available via Visual Studio subscriptions. Thank you, Frank Lesniak, ( @FrankLesniak ) for letting me know.

Windows 11 Enterprise WIM images extracted from ISO files.

Also create a WIM file with the driver package you want to use. In my lab I saved the WIM file as W11-ARM64-22H2-Enterprise.wim and the driver package as WindowsDevKit2023.wim. Also add the following files to the share, you can download them here:

The populated Deployment Share

Start the Deployment

Add the JSDStart.ps1 script to your WinPE 11 for Arm boot image, here is what it looks like. Modify it to match your environment:

# Deployment Server Share
$DeployRoot = "\\DEV001\JurassicDeployment"

# Prompt for username and password 
$Cred = Get-Credential

# Connect to the server
try {
	New-PSDrive -Name Z -PSProvider FileSystem -Root $DeployRoot -Credential $Cred
catch {
	Write-Host "Could not connect to $DeployRoot, please run the JSDStart.ps1 script again"

# Start main deployment script

The script that actually starts the deployment is the JSD.ps1 script, which also injects the unattend.xml example used to automate the Windows 11 for Arm deployment and injects the driver package.

# Jurassic Deployment Start Script 
$OSImage = "W11-ARM64-22H2-Enterprise.wim"
$DriverPackage = "WindowsDevKit2023.wim"
$LocalCache = "W:\Cache"

# Run diskpart script for UEFI partitioning
$DPScriptContent = @(

    "Assign letter=S:"


    "Assign letter=W:"


    "Assign letter=R:"
    "SET ID = de94bba4-06d1-4d40-a16a-bfd50179d6ac"
    "GPT ATTRIBUTES = 0x8000000000000000"

$DPScript = "$env:TEMP\Diskpart.txt"
$DPScriptContent | Out-File $DPScript
$Diskpart = Start-Process diskpart.exe "/s $DPScript" -NoNewWindow -Wait 

# Download and apply the WIM image
New-Item -Path $LocalCache -ItemType Directory -Force
Copy-Item -Path Z:\OS\$OSImage -Destination $LocalCache
DISM.exe /Apply-Image /ImageFile:$LocalCache\$OSImage /Index:1 /ApplyDir:W:\

# Prepare Boot Partition
BCDBoot.exe W:\windows /l en-US
bcdedit.exe /timeout 0

# Add drivers
Copy-Item -Path Z:\Drivers\$DriverPackage -Destination $LocalCache
New-Item -Path W:\Drivers -ItemType Directory
DISM.exe /Apply-Image /ImageFile:$LocalCache\$DriverPackage /Index:1 /ApplyDir:W:\Drivers

# Copy and Apply the Unattend.xml
New-Item -Path W:\Windows\Panther -ItemType Directory
Copy-Item -Path Z:\Unattend.xml -Destination W:\Windows\Panther
New-Item -Path W:\ScratchSpace -ItemType Directory
dism.exe /Image:W:\ /Apply-Unattend:W:\Windows\Panther\Unattend.xml /ScratchDir:W:\ScratchSpace
Remove-Item W:\ScratchSpace -Recurse -Force
Remove-Item W:\Drivers -Recurse -Force

# Reboot to Windows 
wpeutil reboot
A VM with Windows 11 for Arm running on the Windows Dev Kit 2023 hardware


Should you need to recover the Dev Kit 2023 from the default recovery image you can do so via the Surface Recovery site: Surface Recovery Image Download – Microsoft Support

Please note that the Dev Kit 2023 product is not listed in the drop-down list, but if you add the serial number of your device, you get the download link to the 10 GB recovery image.

Downloading the recovery image by providing the serial number
The 10 GB recovery WIM image (separated into multiple SWM images to work on FAt32 UEFI media)
About the author

Johan Arwidmark

0 0 votes
Article Rating
Notify of
Oldest Most Voted
Inline Feedbacks
View all comments
Neil Cole
Neil Cole
3 months ago

Hi Johan, great post as always. So I bought a Surface X Pro. Similar tech, ARM64. Seing the amount of Microsoft bloatware on the default image, and remembering this from a few weeks ago I thought I would give it a try. One issue. Once the clean Win10\Win11 image is deployed to the device, you cannot boot into "reset mode". Not sure what it is called but if you hold shift down when hitting restart you usually get the menu to boot to other devices etc. But with this, you don't. Instead you get the menu which cannot be accessed… Read more »