我的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
}
答案 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"'
因为它将在执行后关闭窗口。