A custom ISO that only removes things is half a tool. With one script file in the right folder, the same install also lays down your standard apps — browser, PDF reader, office suite — before the desktop ever appears.
Windows Setup has a built-in hook for exactly this job: a script named SetupComplete.cmd that Setup runs once, at the end of installation, before the first sign-in, with full system privileges. Place your installers in the image's $OEM$ structure so they are copied onto the disk during setup, call them with their silent switches from that script, and log everything. Done well, a technician's standard build — Windows plus the office app set — finishes unattended. Done casually, the script fails silently and nobody notices until the customer does.
sources\$OEM$ on the install media are copied to matching locations during setup: $$ becomes the Windows folder, $1 becomes the system drive rootSetupComplete.cmd placed in $$\Setup\Scripts therefore arrives at C:\Windows\Setup\Scripts\SetupComplete.cmd on the new system — the exact path Setup executes at the end of installationFirstLogonCommands in the answer file instead — they run at the first sign-in, in the user's contextmsiexec /i C:\Installers\app.msi /qn /norestart/S, /quiet or /silent — verify each one on a test machine; a wrong switch opens a window nobody will ever click, and setup waitsstart /wait for installers that return before they finish, so the next line does not race them>> C:\Windows\Setup\Scripts\setup-log.txt 2>&1 so a failure leaves evidence instead of silence/norestartEvery checkbox, removal and bypass option from this page is shown live in the full video — watch it end to end before you build your own ISO.
▶️ Watch Full VideoSetupComplete.cmd runs once at the end of Setup, as SYSTEM, before anyone signs in — right for machine-wide program installs. FirstLogonCommands run when the first user signs in, in that user's context — right for per-user settings and shortcuts. Most standard builds use both.
Yes — many builders keep a separate Installers folder on the media and reference it from the script or from FirstLogonCommands. Embedding via $OEM$ makes the set travel with the image; a media folder makes it easier to update. Either works if paths are tested.
One installer did not accept the silent switch you gave it, so it waited for a click that never comes during unattended setup. Test every installer command by hand on a spare machine first, and always prefer MSI packages with /qn when a vendor offers them.