Question:
I’m trying to run a PowerShell script as administrator using a shortcut. I have tried many ways, but it still does not work:
1 2 |
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoExit -Verb RunAs Start-Process powershell.exe -ArgumentList '-file C:\project\test.ps1' |
With this command, it will create two PowerShell windows and one window will close.
I also tried this one:
1 2 |
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoExit Start-Process powershell.exe -Verb RunAs -File 'C:\project\test.ps1' |
Can some one please help?
Answer:
Tl;dr
This will do the trick:
1 2 |
powershell.exe -Command "& {$wd = Get-Location; Start-Process powershell.exe -Verb RunAs -ArgumentList \"-ExecutionPolicy ByPass -NoExit -Command Set-Location $wd; C:\project\test.ps1\"}" |
Explanation
First, you have to call PowerShell to be able to execute Start-Process
. You don’t need any additional paramters at this point, because you just use this first PowerShell to launch another one. You do it like this:
1 2 |
powershell.exe -Command "& {...}" |
Inside the curly braces you can insert any script block. First you will retrieve your current working directory (CWD) to set it in the new launched PowerShell. Then you call PowerShell with
Start-Process
and add the -Verb RunAs
parameter to elevate it:
1 2 |
$wd = Get-Location; Start-Process powershell.exe -Verb RunAs -ArgumentList ... |
Then you need to add all desired PowerShell parameters to the
ArgumentList
. In your case, these will be:
1 2 |
-ExecutionPolicy ByPass -NoExit -Command ... |
Finally, you pass the commands that you want to execute to the
-Command
parameter. Basically, you want to call your script file. But before doing so, you will set your CWD to the previously retrieved directory and THEN call your script:
1 2 |
Set-Location $wd; C:\project\test.ps1 |
In total:
1 2 |
powershell.exe -Command "& {$wd = Get-Location; Start-Process powershell.exe -Verb RunAs -ArgumentList \"-ExecutionPolicy ByPass -NoExit -Command Set-Location $wd; C:\project\test.ps1\"}" |