也许有办法用Start-Process cmdlet来做到这一点,我找不到? 我在StackOverflow上find的其他相关的Q / A如this , this和this都给出了一个用自定义的C#代码做的解决scheme。 我的问题是具体的,是否有任何直接的方法在PowerShell中做到这一点? 即你在一个提升的PS控制台,并希望以非pipe理员的身份运行一个进程。
你可以用runas.exe
指定TrustLevel
,有效地运行“restricted”
runas /trustlevel:0x20000 "powershell.exe -command 'whoami /groups |clip'"
您应该在whoami
的输出中看到您的令牌中的Administrators
组标记为“仅用于拒绝”
当你深入研究这个问题时,正如链接任务所提到的那样,没有办法从一个提升的进程运行一个UAC“非”升级进程。 由于这正是我所要求的,而runas解决方案对我无效,所以我将Microsoft提供的代码解决方法转换为使用计划任务来启动“非”升级过程。
从提升的powershell提示符运行powershell.exe作为“非”升级过程的示例:
$apppath = "powershell.exe" $taskname = "Launch $apppath" $action = New-ScheduledTaskAction -Execute $apppath $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) Register-ScheduledTask -Action $action -Trigger $trigger -TaskName $taskname | Out-Null Start-ScheduledTask -TaskName $taskname Start-Sleep -s 1 Unregister-ScheduledTask -TaskName $taskname -Confirm:$false
上述的powershell命令只适用于Windows server 2012 / Windows 8及更高版本。
或者,您可以使用SCHTASKS.EXE应用程序来覆盖大多数版本的Windows:
$apppath = "powershell.exe" $taskname = "Launch $apppath" schtasks /create /SC ONCE /ST 23:59 /TN $taskname /TR $apppath schtasks /run /tn $taskname Start-Sleep -s 1 schtasks /delete /tn $taskname /F
在start-process
存在切换runas
start-process powershell -verb runAs
但仍然uac检查你是否在你的系统uac你应该首先绕过uac有很多方法绕过uac存在,但所有的方式不能在Windows 8的所有窗口工作,如果你写脚本运行过程,然后编译exe文件,你可以使用像runasadmin程序作为管理您的exe在系统中运行,但仍不能在Windows 8中工作