如何使用快捷方式以管理员身份运行PowerShell脚本?

5

我想使用快捷方式以管理员身份运行PowerShell脚本,但尝试了多种方法仍然不起作用:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoExit -Verb RunAs Start-Process powershell.exe -ArgumentList '-file C:\project\test.ps1'

使用此命令,将创建两个PowerShell窗口,其中一个窗口将关闭。
我也尝试了这个:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoExit Start-Process powershell.exe -Verb RunAs -File 'C:\project\test.ps1'

有人能帮忙吗?


我也尝试了这个命令:"powershell.exe -ExecutionPolicy Bypass -NoExit -File "C:\project\test.ps1" "。我可以以普通方式运行,但无法以管理员身份运行,因为当我以管理员身份运行时,它会进入我的Powershell路径而不是项目路径。 - Aaron Li
https://dev59.com/GJnga4cB1Zd3GeqPdcZ_#38907688 - Daniel
如果您只想以管理员身份启动PowerShell,则可以使用以下命令:powershell.exe -WindowStyle Hidden -command "& {start-process powershell -verb runas}" - Daniel
1个回答

5

简而言之

这就可以解决问题:

powershell.exe -Command "& {$wd = Get-Location; Start-Process powershell.exe -Verb RunAs -ArgumentList \"-ExecutionPolicy ByPass -NoExit -Command Set-Location $wd; C:\project\test.ps1\"}"

解释

首先,您必须调用PowerShell才能执行Start-Process。此时您不需要任何额外的参数,因为您只是使用此第一个PowerShell来启动另一个PowerShell。您可以按照以下方式执行:

powershell.exe -Command "& {...}"

在花括号中,您可以插入任何脚本块。首先,您需要检索当前的工作目录(CWD),并将其设置在新启动的PowerShell中。然后使用Start-Process调用PowerShell,并添加-Verb RunAs参数来提权:

$wd = Get-Location; Start-Process powershell.exe -Verb RunAs -ArgumentList ...

然后您需要将所有所需的PowerShell参数添加到ArgumentList中。在您的情况下,这些参数将是:

-ExecutionPolicy ByPass -NoExit -Command ...

最后,您将要执行的命令传递给-Command参数。基本上,您要调用脚本文件。但在此之前,您将把当前工作目录设置为先前检索到的目录,然后再调用脚本:

Set-Location $wd; C:\project\test.ps1

总共:

powershell.exe -Command "& {$wd = Get-Location; Start-Process powershell.exe -Verb RunAs -ArgumentList \"-ExecutionPolicy ByPass -NoExit -Command Set-Location $wd; C:\project\test.ps1\"}"

在Powershell中,你能用"或者`来转义字符串吗? - Brandon Ros
我发现我必须双重转义引号(反斜杠,反引号)。我不完全理解它,但是这个文档非常好。 - Ian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接