通过脚本运行提升的Powershell无效

时间:2018-06-29 08:32:21

标签: powershell

我的Powershell脚本首先检查PS是否以提升模式运行,否则,它会再次以提升模式启动自己。在我的系统上,它运行正常。在另一个系统上,第二个外壳启动并在一秒钟后死亡。 有人知道这个问题吗,或者可以给我提示如何解决问题。没有反病毒处于活动状态,执行策略由组策略设置。

这是代码(在SO上的某个地方找到):

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
    Write-Host "Running elevated..."
    $arguments = "& '" + $myinvocation.mycommand.definition + "'"
    Start-Process powershell -Verb runAs -ArgumentList $arguments
    Break
}

2 个答案:

答案 0 :(得分:2)

您根本不需要参数。够了。

Start-Process powershell -Verb runAs

答案 1 :(得分:0)

您需要做的就是在参数中添加-noexit参数。您可以这样做:

$arguments = "-noexit & '" + $myinvocation.mycommand.definition + "'"

也可能会发生不需要$myinvocation.mycommand.definition部分的情况(这将只在新窗口中再次执行同一命令,因此不是很必要)。在这种情况下,您可以使用:

$arguments = "-noexit"

或删除变量并直接使用此参数:

Start-Process powershell -Verb runAs -ArgumentList '-noexit'

问题排查

此外,如果您想对最初的代码进行故障排除,则可以使用:

$arguments = "& '" + $myinvocation.mycommand.definition + "'; pause"

万一发生任何错误,pause会一直等到您按Enter时在屏幕上显示。

编辑:

Rohin Sidharth所述,-noexit不是必需的,因此该命令可能类似于:

Start-Process powershell -Verb runAs

这不适用于使用以下命令执行powershell.exe的情况:

Start-Process powershell -Verb runAs -ArgumentList 'Write-Host "test"'

因为它将在执行后关闭窗口。