Create a Bootable USB with PowerShell (No GUI Tools)

Was this helpful?

You only learn how bootable USBs actually work when you’re standing in a cold server room at 2 a.m.,
staring at a remote KVM that refuses to see your “perfectly fine” installer. The ISO is correct. The USB is new.
Your patience is not.

This guide is for those moments: creating a bootable USB using PowerShell only—no Rufus, no Etcher, no clicky wizards.
We’ll do it with commands you can audit, automate, and rerun. And we’ll cover the stuff that breaks in production: UEFI vs BIOS,
FAT32 limitations, Secure Boot oddities, and why “it copied fine” doesn’t mean “it boots.”

Ground rules (what we’re building and why)

A “bootable USB” isn’t magic. It’s a USB drive with a partition table, a filesystem the firmware can read,
and boot files placed where the firmware expects them. On modern hardware that usually means UEFI firmware
looking for \EFI\BOOT\BOOTX64.EFI on a FAT32 filesystem.

When you use GUI tools, they quietly make decisions on your behalf: GPT vs MBR, FAT32 vs NTFS,
whether to create one partition or two, whether to write raw images or copy files.
Those decisions can be correct for one machine and wrong for the next.
PowerShell lets you decide deliberately, and—equally important—lets you log what you did.

Our default target in this article: a Windows installation ISO (Windows 10/11, Server) written to USB
in a way that boots on UEFI systems. We’ll also cover BIOS/CSM and the classic gotcha:
Windows ISOs commonly contain a file larger than 4 GB, which FAT32 can’t store.

Opinionated stance: for broad compatibility, build a UEFI-bootable USB with FAT32 and handle the 4 GB file issue properly.
Avoid clever hacks until you’ve validated the boring method.

Interesting facts and small history lessons

  • El Torito (1990s) is the CD-ROM boot standard that made bootable install media mainstream. USB boot later borrowed the “pretend it’s a disk” model.
  • UEFI’s removable media path (\EFI\BOOT\BOOTX64.EFI) exists specifically so a USB can boot without NVRAM boot entries.
  • FAT32 isn’t “old,” it’s “firmware-friendly.” UEFI spec requires firmware to read FAT, which is why FAT32 remains relevant in 2026.
  • NTFS support in firmware is not guaranteed. Some vendors implement it, many don’t, and some do it badly.
  • GPT on removable drives used to be a minefield; many BIOS-era systems only understood MBR. UEFI made GPT normal.
  • Windows install media evolved from install.wim to sometimes install.esd to reduce size; enterprise images still often ship with big WIMs.
  • Secure Boot tightened the rules: bootloaders must be signed (or the platform in Setup Mode). Your USB can be perfect and still “not boot” due to policy.
  • Early USB boot was flaky because BIOS vendors treated USB mass storage like an afterthought. Some of that DNA still shows up in weird boot menus.

Joke #1: UEFI is like modern art—some people insist it’s beautiful, and everyone else just wants the door to open.

Fast diagnosis playbook (find the bottleneck fast)

First: is the machine actually trying to boot the right thing?

  • Check the boot menu entry: is it the “UEFI: USB” entry or the legacy/CSM one?
  • If Secure Boot is enabled, confirm the ISO is an official Microsoft release or otherwise signed appropriately.
  • If it’s a VM or remote KVM, confirm “USB redirection” isn’t presenting as a CDROM device or some emulated oddity.

Second: is the USB formatted in a firmware-readable way?

  • For UEFI, the partition containing \EFI must be FAT32 in the general case.
  • Check whether you accidentally created exFAT (Windows likes it; firmware often doesn’t).
  • Confirm the partition is present and has a drive letter when attached to Windows.

Third: do the required boot files exist at the expected path?

  • On the USB, verify \EFI\BOOT\BOOTX64.EFI exists for x64 UEFI systems.
  • For BIOS, verify there’s a proper boot sector and relevant boot loader files (varies by ISO).
  • Don’t guess. List the directories and validate paths.

Fourth: is file size breaking FAT32?

  • If the ISO has \sources\install.wim > 4 GB, plain file-copy to FAT32 will fail or silently omit files depending on your process.
  • Fix by splitting WIM or using a two-partition approach (FAT32 + NTFS) if you must.

Fifth: is the media itself garbage?

  • Yes, even “new” USB drives fail. Test write/read, reformat, try a different port (especially USB 3 front-panel ports on old boards).
  • If you can’t reproduce the issue with a different stick, stop arguing with physics and replace it.

Prereqs and safety checks (don’t nuke the wrong disk)

You’re about to run commands that can erase disks instantly. The only reliable guardrail is your own discipline.
If you’re on a laptop with an external USB SSD attached and you “clean” the wrong disk, you will learn new emotions.

What you need

  • Windows 10/11 or Windows Server with PowerShell and admin rights.
  • A USB drive (8 GB minimum; 16+ GB is more comfortable).
  • A Windows ISO file accessible locally.

Task 1: Identify disks and confirm the USB by size and bus type

cr0x@server:~$ powershell -NoProfile -Command "Get-Disk | Sort-Object Number | Format-Table Number,FriendlyName,BusType,Size,PartitionStyle -Auto"
Number FriendlyName              BusType    Size PartitionStyle
------ ------------              -------    ---- --------------
0      NVMe Samsung SSD 980      NVMe   1000204886016 GPT
1      SanDisk Ultra USB 3.0     USB       16008609792 RAW

What it means: Disk 1 is USB, 16 GB, currently RAW (no partition table).

Decision: Disk 1 is the target. If your USB shows as something else (like “SATA”), stop and investigate—some docks lie.

Task 2: Sanity check volumes (avoid wiping the wrong one)

cr0x@server:~$ powershell -NoProfile -Command "Get-Volume | Sort-Object DriveLetter | Format-Table DriveLetter,FileSystemLabel,FileSystem,SizeRemaining,Size -Auto"
DriveLetter FileSystemLabel FileSystem SizeRemaining        Size
---------- -------------- ---------- -------------        ----
C          Windows        NTFS        215.73 GB       930.89 GB
E          BACKUP         NTFS        120.11 GB       465.76 GB

What it means: Your USB may not even have a drive letter yet, which is fine.

Decision: If the USB already has a letter and contains anything you care about, copy it off now. We will erase it.

Task 3: Confirm the ISO file exists and isn’t a partial download

cr0x@server:~$ powershell -NoProfile -Command "$iso='C:\ISO\Win11_23H2_English_x64.iso'; Get-Item $iso | Format-List Name,Length,LastWriteTime"
Name          : Win11_23H2_English_x64.iso
Length        : 6640211968
LastWriteTime : 01/10/2026 14:21:53

What it means: ISO exists and is ~6.6 GB.

Decision: If size is suspiciously small (like a few MB), stop—your ISO is not real.

Method: Windows ISO → bootable USB (UEFI-friendly)

There are two basic ways to make a bootable USB:

  1. File-copy method: partition + format the USB, mount the ISO, copy files. This is what we’ll do.
  2. Raw image write: write a disk image bit-for-bit. Windows ISOs are not typically meant to be written raw to USB the way Linux ISOs often are.

For Windows install media, the file-copy method is predictable and maintainable. It also makes it easy to handle the 4 GB limit.

Task 4: Wipe and initialize the USB as GPT (UEFI-first)

cr0x@server:~$ powershell -NoProfile -Command "$disk=1; Clear-Disk -Number $disk -RemoveData -Confirm:\$false; Initialize-Disk -Number $disk -PartitionStyle GPT; Get-Disk -Number $disk | Format-Table Number,PartitionStyle,Size -Auto"
Number PartitionStyle   Size
------ --------------   ----
1      GPT           14.91 GB

What it means: Disk 1 is now GPT.

Decision: If you need this USB to boot on ancient BIOS-only machines, consider MBR instead. For most modern fleets, GPT is the right default.

Task 5: Create a single FAT32 partition and assign a drive letter

cr0x@server:~$ powershell -NoProfile -Command "$disk=1; $p=New-Partition -DiskNumber $disk -UseMaximumSize -AssignDriveLetter; Format-Volume -Partition $p -FileSystem FAT32 -NewFileSystemLabel 'WINSTALL' -Confirm:\$false; Get-Volume -FileSystemLabel WINSTALL | Format-Table DriveLetter,FileSystem,Size,SizeRemaining -Auto"
DriveLetter FileSystem   Size SizeRemaining
---------- ----------   ---- -------------
F          FAT32     14.90 GB     14.85 GB

What it means: USB is now drive F: formatted FAT32.

Decision: Note the drive letter. We’ll copy the ISO contents into it.

Task 6: Mount the ISO and find its drive letter

cr0x@server:~$ powershell -NoProfile -Command "$iso='C:\ISO\Win11_23H2_English_x64.iso'; $img=Mount-DiskImage -ImagePath $iso -PassThru; ($img | Get-Volume) | Format-Table DriveLetter,FileSystemLabel,FileSystem -Auto"
DriveLetter FileSystemLabel FileSystem
---------- -------------- ----------
D          CCCOMA_X64FRE   UDF

What it means: ISO mounted as D: (UDF filesystem, as expected for optical media images).

Decision: We will copy from D:\ to F:\.

Task 7: Inspect the ISO for UEFI boot files before copying

cr0x@server:~$ powershell -NoProfile -Command "Get-ChildItem -Path 'D:\EFI\BOOT' | Select-Object Name,Length | Format-Table -Auto"
Name         Length
----         ------
BOOTX64.EFI  1528832

What it means: The ISO contains the removable-media UEFI boot loader.

Decision: Good sign. If D:\EFI\BOOT\BOOTX64.EFI is missing, the ISO might not be UEFI-bootable as-is.

Task 8: Check for the FAT32 time bomb (install.wim size)

cr0x@server:~$ powershell -NoProfile -Command "Get-Item 'D:\sources\install.wim' -ErrorAction SilentlyContinue | Format-List Name,Length"
Name   : install.wim
Length : 4875429312

What it means: install.wim is ~4.8 GB. FAT32 cannot store a single file larger than 4 GB.

Decision: Do not copy the ISO blindly. Use the WIM splitting method below.

Task 9: Copy everything except install.wim, then split WIM into SWM parts

The clean approach: copy all files, skipping the big WIM, then use DISM to split it into multiple .swm files
that each fit under 4 GB. Windows Setup understands install.swm automatically.

cr0x@server:~$ powershell -NoProfile -Command "robocopy D:\ F:\ /E /R:2 /W:1 /XF install.wim /XD 'System Volume Information' /NFL /NDL"
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : Thursday, February 5, 2026 9:12:51 AM
   Source : D:\
     Dest : F:\

    Files : *.*

  Options : *.* /NFL /NDL /S /E /DCOPY:DA /COPY:DAT /R:2 /W:1

------------------------------------------------------------------------------

  Total    Copied   Skipped  Mismatch    FAILED    Extras
   Dirs :       62        62        0        0        0        0
  Files :      987       986        1        0        0        0
  Bytes :  5.92 g   1.36 g   4.56 g        0        0        0
  Times :   0:02:31   0:02:31                       0:00:00   0:00:00

  Ended : Thursday, February 5, 2026 9:15:22 AM

What it means: One file was skipped: install.wim. That’s intentional.

Decision: Now generate install.swm parts onto the USB.

cr0x@server:~$ powershell -NoProfile -Command "dism /Split-Image /ImageFile:D:\sources\install.wim /SWMFile:F:\sources\install.swm /FileSize:3800"
Deployment Image Servicing and Management tool
Version: 10.0.22621.1

Splitting image: D:\sources\install.wim
[==========================100.0%==========================]
The operation completed successfully.

What it means: DISM split the WIM into parts: install.swm, install2.swm, etc.

Decision: Confirm the files exist and are under 4 GB each.

Task 10: Validate the SWM files and remove any accidental WIM copy

cr0x@server:~$ powershell -NoProfile -Command "Get-ChildItem 'F:\sources' -Filter 'install*.s*' | Select-Object Name,Length | Format-Table -Auto"
Name           Length
----           ------
install.swm    3984568320
install2.swm   3961206784

What it means: SWM parts exist and fit within FAT32’s limit.

Decision: Ensure F:\sources\install.wim does not exist. Setup should only see SWM parts in this case.

cr0x@server:~$ powershell -NoProfile -Command "Test-Path 'F:\sources\install.wim'"
False

Task 11: Dismount the ISO cleanly

cr0x@server:~$ powershell -NoProfile -Command "$iso='C:\ISO\Win11_23H2_English_x64.iso'; Dismount-DiskImage -ImagePath $iso"

What it means: ISO is no longer mounted.

Decision: Safely eject the USB when ready, but first verify boot files and structure.

Joke #2: A bootable USB is just a tiny disk with big expectations—kind of like my first on-call shift.

Handling install.wim larger than 4 GB (FAT32 reality)

FAT32’s maximum single-file size is 4 GiB minus 1 byte. This is not negotiable. You can’t “force it.”
If you try, you’ll get a copy error, or worse: a tool that claims success but silently skips the file.
Either outcome leads to a USB that boots fine and fails later, right when Setup needs the image.

Option A (recommended): Split WIM into SWM

This is what we did above. It preserves UEFI compatibility and keeps the USB simple: one partition, one filesystem, one set of expectations.
It also makes your process auditable—DISM prints what it did.

Option B: Two partitions (FAT32 boot + NTFS payload)

Sometimes you’re distributing a customized image and splitting isn’t desirable. A common pattern is:
FAT32 partition containing \EFI and boot files, plus an NTFS partition containing the large WIM.
This can work, but it increases firmware variance and human error. Some systems only enumerate the first partition on removable media.
Some boot menus get confused. Some people copy the wrong things to the wrong partition.

If you do it anyway, keep the FAT32 partition first, small (say 1–2 GB), and verify your target hardware can see both partitions.
For the Windows installer specifically, you must ensure Setup can access the NTFS partition during booted WinPE.
Most modern WinPE builds can, but “most” is not a change-control category.

Option C: Convert WIM to ESD (sometimes)

Converting WIM to ESD can reduce size, but it’s not always appropriate for enterprise imaging workflows.
It can also affect servicing scenarios. If you don’t already know why you want ESD, you probably don’t.

Legacy BIOS notes (when you’re stuck in 2009)

Legacy BIOS boot from USB is a different world: it expects boot sectors and often prefers MBR.
Some Windows ISOs include BIOS boot support; some platforms require “USB-HDD” style layout.

If you must support BIOS-only hardware, consider making the USB MBR instead of GPT. That said, many environments “support BIOS”
in policy while the actual hardware is UEFI for the last decade. Verify before you design for ghosts.

Task 12: Initialize the USB as MBR (BIOS-friendly alternative)

cr0x@server:~$ powershell -NoProfile -Command "$disk=1; Clear-Disk -Number $disk -RemoveData -Confirm:\$false; Initialize-Disk -Number $disk -PartitionStyle MBR; Get-Disk -Number $disk | Format-Table Number,PartitionStyle -Auto"
Number PartitionStyle
------ --------------
1      MBR

What it means: The USB now uses MBR.

Decision: Only do this if you truly need BIOS boot. Otherwise stick to GPT for UEFI-first fleets.

For BIOS boot, “active” partitions still matter in some cases. PowerShell’s storage cmdlets don’t expose every BIOS-era flag cleanly.
When you’re deep in legacy compatibility, diskpart is sometimes the least-bad tool. If your requirement is truly “PowerShell only,”
you may still call diskpart from PowerShell. That’s not a GUI tool; it’s just a sharp knife.

Verification tasks (prove it will boot)

SRE instinct: don’t trust success messages. Measure. Validate. Collect evidence you can attach to a ticket when someone claims
“the USB you made doesn’t work” while booting from the network by accident.

Task 13: Confirm filesystem and free space on the USB

cr0x@server:~$ powershell -NoProfile -Command "Get-Volume -DriveLetter F | Format-List DriveLetter,FileSystem,HealthStatus,Size,SizeRemaining"
DriveLetter   : F
FileSystem    : FAT32
HealthStatus  : Healthy
Size          : 16000143360
SizeRemaining : 8429182976

What it means: FAT32, healthy, enough free space.

Decision: If it’s exFAT or NTFS and you expect UEFI boot everywhere, fix it now rather than arguing with firmware later.

Task 14: Verify the removable media boot path exists on the USB

cr0x@server:~$ powershell -NoProfile -Command "Test-Path 'F:\EFI\BOOT\BOOTX64.EFI'"
True

What it means: The key UEFI boot file exists.

Decision: If False, your copy didn’t include EFI files (or you mounted the wrong ISO). Recopy and recheck.

Task 15: Validate the \sources directory has what Setup needs

cr0x@server:~$ powershell -NoProfile -Command "Get-ChildItem 'F:\sources' | Select-Object -First 10 Name | Format-Table -Auto"
Name
----
acmigration.dll
background.bmp
boot.wim
compatresources.dll
diagerr.xml
diskpart.exe
etwproviders.dll
inf
install.swm
install2.swm

What it means: boot.wim exists and SWM parts are present.

Decision: If boot.wim is missing, the USB may boot into nothing or fail early.

Task 16: Confirm the USB is readable end-to-end (quick hash spot-check)

cr0x@server:~$ powershell -NoProfile -Command "Get-FileHash 'F:\EFI\BOOT\BOOTX64.EFI' -Algorithm SHA256 | Format-List Algorithm,Hash"
Algorithm : SHA256
Hash      : 4C5E9AB2D16B9F5D3B8C0CE4D8B6F26B1D9C3B7D8B7B7C3A9B0D2D4E9A5F0B1C

What it means: The file is readable and hashable; you’re not hitting immediate I/O errors.

Decision: If hashing throws errors, the USB may be failing. Replace it rather than debugging ghosts.

Task 17: Confirm the partition layout is what you think it is

cr0x@server:~$ powershell -NoProfile -Command "Get-Partition -DiskNumber 1 | Format-Table DiskNumber,PartitionNumber,DriveLetter,Size,GptType,MbrType -Auto"
DiskNumber PartitionNumber DriveLetter    Size GptType                               MbrType
---------- --------------- -----------    ---- -------                               ------
1          1               F           14.90 GB EBD0A0A2-B9E5-4433-87C0-68B6B72699C7

What it means: Single data partition on GPT (basic data).

Decision: For removable UEFI boot, the critical part is FAT32 + EFI path. Partition type is less important than contents,
but weird layouts can confuse old firmware.

Task 18: Quick directory size sanity check (did you actually copy most of the ISO?)

cr0x@server:~$ powershell -NoProfile -Command "(Get-ChildItem F:\ -Recurse -Force | Measure-Object -Property Length -Sum).Sum"
5123456789

What it means: Total bytes on the USB is a plausible multi-gigabyte value.

Decision: If it’s tiny (hundreds of MB), you didn’t copy correctly or skipped too much.

One operations quote (paraphrased idea)

paraphrased ideaGene Kranz: “Tough and competent” beats panic; in operations, discipline wins when systems misbehave.

Three corporate mini-stories (things that actually happen)

Incident: a wrong assumption about NTFS and UEFI

A mid-sized enterprise had a standard “Windows recovery USB” process owned by desktop support. It worked fine on their newer laptops,
so everyone declared it solved. Then a batch of rack servers needed emergency OS reinstall after a storage controller firmware upgrade went sideways.
The remote hands team arrived with the USB. The servers stared back, unimpressed.

The assumption was simple: “UEFI can boot from NTFS, because it boots from our NTFS USB on laptops.”
That was accidentally true on that laptop model because the vendor firmware included NTFS drivers.
The servers’ firmware did not. No NTFS support, no boot.

The team tried toggling Secure Boot, changing ports, and swapping sticks. Nothing. The USB showed up in the boot menu, but boot failed instantly.
Someone suggested “maybe the ISO is corrupted,” which was a comforting story because it didn’t imply anyone made a design mistake.

The fix was painfully boring: re-create the USB as FAT32, and split the WIM. After that, the servers booted first try.
The real outcome wasn’t just “systems restored.” They updated the internal runbook to specify FAT32 for UEFI removable media, and a validation step
to check \EFI\BOOT\BOOTX64.EFI exists.

Post-incident lesson: success on one hardware class is not proof. Firmware is a platform. Treat it like one.

Optimization that backfired: “let’s make it faster” with aggressive copy flags

Another team wanted to speed up building installer USBs for a migration project. Someone got clever with parallel copy jobs
and a short retry policy to “fail fast.” The script used background jobs to copy multiple directories at once,
then declared success if the jobs didn’t throw terminating errors.

It was fast. It was also wrong in a subtle way: occasional transient read errors on cheap USB media caused a handful of files to be skipped,
but the jobs completed. The script didn’t validate file counts or critical paths. The USB would boot, start Windows Setup, then fail during installation
with missing component errors that looked like random WinPE misery.

The worst part: it failed rarely. That meant it escaped testing and showed up as “field failures.”
Nothing destroys a rollout timeline like intermittent media defects that look like OS bugs.

The fix was to stop optimizing the wrong thing. They went back to a single robocopy with explicit logging,
plus a small set of mandatory validations: presence of boot files, presence of boot.wim, and a check that
SWM split completed successfully. Total time increased slightly. Failure rate dropped to essentially zero.

Lesson: performance optimizations without correctness checks are just faster ways to get to wrong.

Boring but correct practice that saved the day: labeling and deterministic drive selection

In a regulated environment, an infra team maintained a scripted USB build process for bare-metal recovery.
The script did one unsexy thing exceptionally well: it never selected the target disk by “the disk that looks like a USB.”
It required the operator to confirm the disk number and it stamped the USB with a known volume label.

One afternoon, an engineer ran the script on a workstation with a USB-to-SATA adapter plugged in.
Windows reported it as a removable-ish device, and it was roughly the same size as the intended target.
On a bad day, that’s how you wipe an external backup drive and spend the weekend apologizing.

But the script forced two confirmations: first it printed the disk list, then it demanded the operator type the exact disk number,
and finally it checked that the newly formatted volume label matched an expected value before copying any files.
The engineer noticed the label mismatch on the second prompt and stopped.

Later, when the same team had to rebuild media quickly during an outage, that deterministic process meant anyone on-call
could do it without “tribal knowledge.” It also produced logs that satisfied audit requirements without drama.

Lesson: boring guardrails are what you want at 2 a.m. They don’t make you feel smart, which is exactly the point.

Common mistakes: symptoms → root cause → fix

1) USB shows in boot menu but immediately returns to BIOS/UEFI setup

Root cause: Missing or misplaced UEFI boot file (\EFI\BOOT\BOOTX64.EFI), or wrong filesystem (exFAT/NTFS on firmware that only reads FAT).

Fix: Format FAT32, recopy ISO contents, verify Test-Path F:\EFI\BOOT\BOOTX64.EFI is True.

2) Boot starts, Windows Setup loads, then installation fails with missing files

Root cause: install.wim failed to copy to FAT32 due to 4 GB limit, or was skipped during copy.

Fix: Split WIM into SWM with DISM; confirm SWM files exist and no install.wim remains on FAT32.

3) Copy operation “succeeded,” but USB content is too small

Root cause: Copied from wrong source (not the mounted ISO), or robocopy excluded directories, or permissions hid errors.

Fix: Re-mount ISO, verify source drive letter, rerun robocopy without over-filtering, and sanity-check total bytes copied.

4) USB boots on laptops but not on servers

Root cause: Vendor-specific firmware features (NTFS support, different removable media behavior, USB port initialization quirks).

Fix: Use FAT32 UEFI path, prefer rear motherboard ports, and validate on the target class of hardware—not the nearest laptop.

5) Secure Boot blocks boot with a policy violation

Root cause: Unsigned or modified bootloader, or non-Microsoft media in a strict Secure Boot environment.

Fix: Use official installation media or enroll appropriate keys; don’t “solve” it by disabling Secure Boot unless policy allows.

6) The USB intermittently disappears or causes I/O errors during copy

Root cause: Failing USB media, flaky port/hub, or power issues on front-panel ports.

Fix: Try a different USB stick and port; if hashing files throws errors, stop troubleshooting and replace hardware.

7) UEFI boots, but keyboard/mouse doesn’t work in WinPE

Root cause: USB input device not initialized correctly (some firmware settings, xHCI handoff issues), or missing drivers in WinPE for certain hardware.

Fix: Use different ports (USB 2 if available), adjust firmware USB settings, or use updated installation media with broader driver support.

8) “Access denied” when formatting or assigning a letter

Root cause: Not running elevated PowerShell, or a process is holding the volume open.

Fix: Run PowerShell as Administrator; close Explorer windows; re-run Get-Process checks if needed.

Checklists / step-by-step plan

Checklist A: UEFI-first Windows installer USB (single FAT32 partition)

  1. Identify target disk: Get-Disk and confirm by BusType=USB and size.
  2. Clear and initialize as GPT: Clear-Disk, Initialize-Disk -PartitionStyle GPT.
  3. Create partition + FAT32 format + label: New-Partition, Format-Volume -FileSystem FAT32.
  4. Mount ISO: Mount-DiskImage; capture ISO drive letter.
  5. Check install.wim size; if > 4 GB, plan to split.
  6. Copy ISO contents skipping install.wim via robocopy.
  7. Split WIM to SWM using DISM into F:\sources.
  8. Verify: \EFI\BOOT\BOOTX64.EFI exists; boot.wim exists; SWM files exist; volume is FAT32.
  9. Dismount ISO; eject USB.

Checklist B: Minimum verification before you hand the USB to someone else

  1. Boot path: Test-Path F:\EFI\BOOT\BOOTX64.EFI must be True.
  2. WinPE: Test-Path F:\sources\boot.wim must be True.
  3. Install payload: either install.esd exists, or install.swm exists (and no missing pieces).
  4. Filesystem: Get-Volume shows FAT32.
  5. Copy integrity: run at least one Get-FileHash on a couple of key files to ensure read stability.

Checklist C: If you’re automating this in a script

  • Require an explicit disk number input; never auto-pick.
  • Write logs: disk selection, partition style, volume label, robocopy summary, DISM output.
  • Fail hard if mandatory paths are missing after copy.
  • Keep your script idempotent where possible (clear disk then build the same layout every time).

FAQ

1) Can I make a bootable Windows USB by just copying the ISO file onto the drive?

No. Firmware doesn’t boot an ISO file sitting on a filesystem (not in the general case). It boots a loader file from a filesystem or a boot sector.
You must mount the ISO and copy its contents (or otherwise write a proper disk image with boot structure).

2) Why FAT32? It feels ancient.

Because firmware can read it. UEFI implementations are required to support FAT. NTFS support is optional and inconsistent.
FAT32 is the boring format that works when you’re dealing with random server boards at inconvenient times.

3) What if my ISO has install.esd instead of install.wim?

Great. ESD is often smaller, so it usually fits on FAT32 without splitting.
Check the size anyway: Get-Item D:\sources\install.esd.

4) Do I need GPT for the USB?

For UEFI boot, GPT is a good default. Some firmware will boot UEFI from MBR too.
If you’re targeting legacy BIOS, MBR is often safer. If you’re targeting modern servers, GPT keeps things consistent.

5) Why not just use diskpart instead of PowerShell cmdlets?

You can call diskpart from PowerShell, and sometimes it’s the pragmatic move for edge cases.
But PowerShell cmdlets are more scriptable, more discoverable, and generally easier to validate with structured output.

6) The USB is FAT32, boot files exist, but it still won’t boot. Now what?

Check the boot mode selection (UEFI vs legacy), Secure Boot policy, and try a different port.
Then suspect the USB stick itself. If it only fails on one hardware model, suspect firmware quirks or missing support for multi-partition media.

7) Can I create a bootable USB for Linux distros with the same method?

Sometimes, but many Linux ISOs are designed as hybrid images that are best written raw.
This article is Windows-install-media-focused. File-copy works when the ISO’s boot structure expects it; raw write works when the ISO is built for it.

8) How do I know if my failure is “USB not bootable” vs “installer problem”?

If you never reach the installer UI, it’s usually boot path/filesystem/firmware mode.
If you reach Setup and it fails later (copying files, selecting edition, applying image), it’s often missing or corrupt payload files (WIM/SWM/ESD).

9) Can I do this without Admin rights?

Not reliably. Formatting disks and mounting images typically requires elevation.
If you’re in a locked-down environment, work with whoever controls endpoint privileges—don’t hack around it with sketchy tools.

10) Should I disable “quick format” for safety?

Quick format is fine for most cases. It doesn’t test the entire surface, though.
If you suspect bad media, replace the USB or run more thorough checks; don’t pretend formatting is a hardware validation tool.

Conclusion: next steps you can actually do

If you remember only three things, make them these: pick the correct disk on purpose, use FAT32 for UEFI boot compatibility, and handle the 4 GB file limit
with WIM splitting instead of wishful thinking.

Next steps:

  1. Turn your final command sequence into a script with explicit disk confirmation and post-copy validations.
  2. Test on the same hardware class you’ll install on (server firmware is not a laptop).
  3. Keep one known-good USB in a labeled bag and treat it like incident tooling—because that’s what it is.

The goal isn’t to feel clever. The goal is to boot on the first try when the system is already on fire.

← Previous
Windows Server 2025 Install Like a Pro: Roles, Updates, and Hardening in 60 Minutes
Next →
Pick a WSL Distro That Won’t Annoy You (Ubuntu vs Debian vs Others)

Leave a comment