The -WorkingDirectory
parameter doesn't work when using -Verb RunAs
. Instead, you have to set the working directory by calling cd
within a -Command
string.
This is what I use: (cmd/batch-file command)
powershell -command " Start-Process PowerShell -Verb RunAs ""-Command `""cd '%cd%'; & 'PathToPS1File';`"""" "
If you want to make a "Run script as admin" right-click command in Windows Explorer, create a new registry key at HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command
, and set its value to the command above -- except replacing %cd%
with %W
, and PathToPS1File
with %1
(if you want it to execute the right-clicked file).
Result: (Windows Explorer context-menu shell command)
powershell -command " Start-Process PowerShell -Verb RunAs ""-Command `""cd '%W'; & '%1';`"""" "
EDIT: There's an alternative way to have the script be run as admin from Explorer, by using the "runas" sub-key: https://winaero.com/blog/run-as-administrator-context-menu-for-power-shell-ps1-files
If you want to run your script as admin from an existing powershell, remove the outer powershell call, replace %W
with $pwd
, replace %1
with the ps1 file-path, and replace each ""
with just "
.
Note: The ""
's are just escaped quotes, for when calling from the Windows shell/command-line (it's quote-handling is terrible). In this particular case, just "
should also work, but I use the more robust ""
for easier extension.
See here for more info: https://stackoverflow.com/a/31413730/2441655
Result: (PowerShell command)
Start-Process PowerShell -Verb RunAs "-Command `"cd '$pwd'; & 'PathToPS1File';`""
Important note: The commands above are assuming that your computer has already been configured to allow script execution. If that's not the case, you may need to add -ExecutionPolicy Bypass
to your powershell flags. (you may also want -NoProfile
to avoid running profile scripts)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…