我尝试使用其-NoProfile
开关以降低的提升运行powershell.exe的新示例(来自PowerShell/ISE/pwsh/VSCode),但还没有找到传递-NoProfile
开关的方法,以导致新的非提升PowerShell控制台使用自定义颜色/布局,这在从资源管理器窗口双击powershell.exe时是正常的。
从提升的主机/控制台降低提升似乎有两种相当常见的方法:
- 使用
runas.exe /trustlevel:0x20000 powershell.exe
- 控制台窗口不使用通常显示的自定义布局/颜色,通常显示为黑色控制台窗口。
- 有一个关于蓝色和黑色控制台here之间差异的SO问题。
- Lee Holmes对此也有一个简短的blog。
- 利用explorer.exe的(默认)较低信任级别并执行如下操作:
Start-Process $env:SystemRoot\explorer.exe $PSHome\powershell.exe
- 如果用户禁用了UAC,那么explorer.exe无论如何都将以提升方式运行,因此此方法不如使用
runas.exe /trustlevel:0x20000 powershell.exe
可靠
我试过了
runas.exe /trustlevel:0x20000 "powershell.exe -NoProfile"
- 工作,但打开一个黑色的控制台窗口。
runas.exe /trustlevel:0x20000 "explorer.exe powershell.exe -NoProfile"
- 打开资源管理器窗口。
- 使用
[System.Diagnostics.Process]::new()
和[System.Diagnostics.ProcessStartInfo]::new()
的各种组合和重载均未成功。 - 使用各种形式的
start /b "" xyz
都没有成功。
有没有其他更好的方法?编辑注册表来设置默认的控制台布局/颜色不是不可能的,但它不是最理想或最可靠的解决方案。
1条答案
按热度按时间ldxq2e6h1#
conhost.exe
)窗口的 * 启动 * 窗口标题,用于确定要应用的设置,取自注册表项[HKEY_CURRENT_USER\Console\<transformed-exe-path>]
,其中<transformed-exe-path>
是可执行文件的完整路径,\
字符替换为_
,如this answer中所述。runas.exe /trustlevel:0x20000
,你会得到一个 * 自定义 * 的windows标题,它总是在启动命令行中 * 附加 * 以下内容:(running as <computer>\<user> with restricted privileges)
-并且由于这样的标题不太可能在[HKEY_CURRENT_USER\Console]
中具有特定的子项,因此应用 * default * 控制台设置。解决这个问题的最简单方法是通过
cmd /c start
调用来启动一个 * new * 窗口-或者依赖于新窗口的目标可执行文件的路径来选择正确的设置,或者指定一个显式的启动标题:注:
cmd /c
的 * transient * 一个,以及由start
创建的目标一个-希望transient一个的寿命太短而没有视觉效果。/trustlevel
,同时也不为当前计算机 * 体系结构 * 提供/machine
参数:start
启动的进程指定一个显式的窗口标题,事情就变得棘手了,因为这个标题必须用"..."
括起来,这是由于一个长期存在的PowerShell错误,它与将嵌入了"
字符的参数传递给外部程序有关(参见this answer),必须 * 手动 * 转义为\"
;例如,设置自定义标题Custom Title
: