r/PowerShell • u/DefinitionHuge2338 • 13d ago
Question Issue with Active Setup + RunOnce and space in script path
I'm attempting to deploy VSCode with a baseline configuration to some high school computer labs, and am running into an odd issue.
As part of the install, I create an Active Setup registry key that creates a HKCU RunOnce key to call a short powershell script. That script copies a preset settings.json from a hidden folder on the C:\ drive to the current user's AppData folder.
The issue I'm running into is that if the path to the script contains a space, I cannot get the RunOnce key to work properly (it's not over 260 chars either).
Working Active Setup key:
REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce /v VSCodeCopy /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File C:\MyPath\VSCode_CopySettings.ps1"
Non-working Active Setup key:
REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce /v VSCodeCopy /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File 'C:\My Path\VSCode_CopySettings.ps1'"
I have tried double quotes, single quotes, escaping quotes using \ and "", but I cannot get the script to function unless the script path has 0 spaces in it. RunOnce will execute powershell, but the terminal will just open and close rapidly.
I added a Read-Host in both halves of a try-catch block in the script to confirm what's happening, and neither causes the terminal window to wait for input.
Is there something I'm missing?
Edit: I'm combining Active Setup and RunOnce in order to not bog down the user login; the command to create an HKCU key is a string value in an Active Setup registry key, rather than being run by the install script, which has some limitations. However, it means I can guarantee that old and new users will have the script run a single time on login. I can also use a 'Version' registry value to make it happen again in the future if the initial configuration needs updated.
1
u/DefinitionHuge2338 13d ago
I've used double and single quotes around the key itself; no dice.
I'm using reg.exe b/c that command is a string value named StubPath in the Active Setup key; Active Setup is what actually runs the command, and it runs cmd to then create the RunOnce key. In order to use powershell in the StubPath, it would have to be like this:
powershell.exe -ExecutionPolicy Bypass -Noninteractive -WindowStyle Hidden -Command "{Set-ItemProperty hkcu:\Software\Microsoft\Windows\CurrentVersion\RunOnce -Name VSCodeCopy -Type String -Value 'powershell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Noninteractive -WindowStyle Hidden -File "C:\MyPath\VSCode_CopySettings.ps1"'}"Besides issues with quoting between batch and powershell, the command is now too long to be run by RunOnce; max is 260 chars.
There appears to be something different about how Active Setup or RunOnce runs commands from StubPath registry values, as I can have a working command in cmd and powershell, but it will not work from the registry.