也许有一种方法可以使用 Start-Process 命令,但我找不到?我在 StackOverflow 上找到的其他相关问题与答案(例如这个,这个和这个)都提供了使用自定义 C# 代码完成此操作的解决方案。我的问题是:是否有任何直接的方式在 PowerShell 中执行此操作?即,您位于已提升的 PS 控制台中,想要以非管理员身份运行进程。
您可以使用 runas.exe
指定 TrustLevel
,从而有效地运行"受限"。
runas /trustlevel:0x20000 "powershell.exe -command 'whoami /groups |clip'"
你应该在whoami
的输出中看到,你的令牌中的Administrators
组被标记为“只用于拒绝”。
0x20000
使账户的“高强制级别”标签保持启用状态。只有 0x1000
启用了“Everyone”、“Users”和“Authenticated Users”。/showtrustlevels
甚至没有列出这个级别。这个信息在哪里有记录?在下面的文章中没有提到,但提到了 0x20000
:Windows Vista 中的新 ACL 提升了安全性。 - Eryk Sun0x1000
的,正如我所提到的,它将所有组都设置为拒绝(包括完整性标签),除了组“Everyone”、“Users”和“Authenticated Users”之外。我只是通过实验发现了这一点。它似乎没有在任何地方有记录。 - Eryk Sun/trustlevel:0x1000
启动任何东西时,无论调用进程的信任级别如何,都会出现应用程序无法正确启动(0xc0000142)
的错误。你在哪个版本的Windows上成功了呢? - Mathias R. Jessen另一种有限的方法:让Windows资源管理器为您启动它
PS C:\> explorer.exe "C:\windows\system32\cmd.exe"
.BAT
或.CMD
。gsudo --integrity medium MyApp.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
$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
-Settings (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries)
。 - Vimes您可以通过传递要运行的用户的凭据,从提升的会话中运行非管理员进程。如果您想交互式运行,则可以使用 Get-Credential
,或者如果您想让脚本无人值守地运行,则可以使用 Import-Clixml
或 SecretStore 或其他已建立的存储和检索凭据机制。例如:
$credential = Get-Credential -UserName $Env:USERNAME
# or
$credential = Import-Clixml -Path 'C:\MyCredential.cred'
Start-Process -FilePath pwsh.exe -ArgumentList '-noprofile' -Credential $credential -Wait
在 start-process
中存在类似于 runas
的开关
start-process powershell -verb runAs
但是如果您的系统开启了UAC,它仍然会检查您,因此您应该首先绕过UAC。有许多方法可以绕过UAC,但并不是所有方法都适用于所有Windows版本,例如Windows 8。如果您编写运行进程的脚本,那么编译为exe,您可以使用像runasadmin这样的程序在系统中以管理员身份运行您的exe,但在Windows 8中仍然无法正常工作。