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 🙂

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.

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.

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:
https://github.com/DeploymentResearch/DRFiles/tree/master/Scripts/ArmDeployment

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"
Break
}
# Start main deployment script
Z:\JSD.ps1
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 = @(
"SELECT DISK 0"
"CLEAN"
"CONVERT GPT NOERR"
"CREATE PARTITION EFI Size=500"
"Assign letter=S:"
"FORMAT QUICK FS=FAT32 LABEL=System"
"CREATE PARTITION MSR Size=128"
"CREATE PARTITION Primary"
"Assign letter=W:"
"FORMAT QUICK FS=NTFS LABEL=Windows"
"SHRINK MINIMUM=1024"
"CREATE PARTITION Primary"
"Assign letter=R:"
"FORMAT QUICK FS=NTFS LABEL=Recovery"
"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

Recovery
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.


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 »
I haven't tried, but I suspect touch screen and keyboard drivers are missing in the recovery image (WinRE).