I'm working on my dotfiles and I'm wanting to create a batch script that will do some initial setup for me when switching to a new computer, like using psget to install modules, etc... I'd also like it to go ahead and change my ExecutionPolicy to something usable.

I created a batch file that simply fires off a powershell script under the Bypass ExecutionPolicy:

powershell -ExecutionPolicy ByPass 
           -NoLogo -NoProfile -NoExit 
           -File .\set-policy.ps1

set-policy.ps1 attempts to run powershell as administrator to change the ExecutionPolicy:

Start-Process powershell -verb runas 
  -ArgumentList "-No Exit -Command { Set-ExecutionPolicy Restricted }"

Unfortunately, that doesn't seem to do that trick (output below). Not sure what the problem is.

Set-ExecutionPolicy Restricted
PS C:\windows\system32> Get-ExecutionPolicy

Any tips on how to use a batch file + powershell script to change execution policy?

  • Looks like there might be a problem with uac. Are you running this from an elevated command prompt? – Stephen Connolly Jul 6 '13 at 6:14
  • Yea, which is why when I launch powershell to change the execution policy I use -verb runas which will bring up the uac prompt and launch powershell as administrator. – Jeff Bridgman Jul 7 '13 at 14:34

The problem is how you are invoking the new PowerShell process; it seems to be executing commands before the PowerShell prompt is ready for it, so they just get printed to the console; I'm not sure why though. Anyways, here is the fix.

This is how your set-policy.ps1 file should look:

Start-Process PowerShell -ArgumentList "Set-ExecutionPolicy Restricted -Force" -Verb RunAs

Or you can do the entire thing from the batch file in one line like so:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy Restricted -Force' -Verb RunAs}"

I provide a little more information around calling PowerShell scripts from batch files and why you would want to do it on my blog post here.

  • 1
    +1 That blog post is pure Gold! Unfortunate though, that dealing with PowerShell is made this difficult. Someone must have actually Planned it? – akauppi Nov 17 '14 at 16:46

The easiest way for me to do this was to edit the registry. So now my batch file simply contains:

regedit.exe /S EnableScripts.reg

Running that will automatically prompt the user for permission/credentials as necessary. My EnableScripts.reg file just contains the following:

Windows Registry Editor Version 5.00


The registry setting above was sufficient except for when running the x86 PowerShell (on my 64 bit machine). That required additionally setting the registry keys below:

Windows Registry Editor Version 5.00


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.