Make a PowerShell script run on startup in the OOBE Sysprep environment

1.9k views Asked by At

Thanks for stopping by, I've searched the corners of the internet but haven't gotten anywhere.

To provision devices for my organization, we must manually run PowerShell commands using SHIFT + F10 in the Windows 11 OOBE as we have multiple methods, one of which being legacy. I'm sure there are better methods but I'm unfortunately working within these limitations. So far, to automate the imaging process, I've created an autounattend.xml which makes WinPE completely silent and some pages of the OOBE also.

Recently, I combined all the PowerShell commands we had been running prior into a script that, after running repeated checks for a network connection, prompts users with a GUI and effectively automates everything we had been doing manually before:

Message box with radio buttons

I need to make this run when the OOBE Sysprep starts, but I really need some help.

  • The script contains GUI, so it cannot run silently and the user needs to interact with it.
  • The script must start with the OOBE Windows Welcome Screen, (i.e. select region screen). This is a limitation of the modules used and I therefore can't include it as a synchronous command in FirstLogonCommands or include it in SetupComplete.cmd, as those both execute after the OOBE is completed.
  • I've tried configuring the answer file to boot into audit mode and have the script run there, but the script requires several reboots and I get an installation failed message after any reboot (despite later making the script enable the Administrator account and call "sysprep /audit /reboot"). Additionally, the Audit Administrator account takes ~15 minutes to log in so it defeats the whole purpose of time saving.
  • I've tried using Task Scheduler, running both on System Start Up and User Log On, as defaultuser0, BUILTIN\Administrators and SYSTEM. Task scheduler seems to either queue tasks or not call them at all in the OOBE
  • I've tried placing the script, and then a shortcut of the script, in the common start up folder but that didn't work either.

To reiterate, I need a way to automatically run a script when the OOBE Sysprep starts. Furthermore, I need it to run every time the OOBE is launched as sometimes, we have to manually reboot if something glitches or goes wrong so the script will need to run again when the OOBE is resumed.

I know this is a tough one due to the limitations, but this will make the device rollout significantly easier.

Thanks,

Jake

1

There are 1 answers

2
JAKE RAFF On

For anyone that sees this, you can accomplish this using gpedit logon scripts.

The console will open behind the OOBE interface so it is best to use a program like NirCMD to hide it.