windows PowerShell -在不提升的情况下使用-NoProfile启动另一个PowerShell.exe示例

xdnvmnnf  于 2023-02-25  发布在  Windows
关注(0)|答案(1)|浏览(212)

我尝试使用其-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都没有成功。

有没有其他更好的方法?编辑注册表来设置默认的控制台布局/颜色不是不可能的,但它不是最理想或最可靠的解决方案。

ldxq2e6h

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 * 窗口-或者依赖于新窗口的目标可执行文件的路径来选择正确的设置,或者指定一个显式的启动标题:

runas /trustlevel:0x20000 'cmd /c start powershell.exe -noprofile'

注:

  • 这将创建 * 两个 * 控制台窗口:cmd /c的 * transient * 一个,以及由start创建的目标一个-希望transient一个的寿命太短而没有视觉效果。
  • 在Windows 11中,至少在版本22H2之前,当前存在a bug,该a bug阻止使用/trustlevel,同时也不为当前计算机 * 体系结构 * 提供/machine参数:
runas "/machine:$($env:PROCESSOR_ARCHITECTURE.ToLower())" /trustlevel:0x20000 'cmd /c start powershell.exe -noprofile'
  • 如果你需要为start启动的进程指定一个显式的窗口标题,事情就变得棘手了,因为这个标题必须用"..."括起来,这是由于一个长期存在的PowerShell错误,它与将嵌入了"字符的参数传递给外部程序有关(参见this answer),必须 * 手动 * 转义为\";例如,设置自定义标题Custom Title
# A solution that works in v7.3+ too
& {
  $PSNativeCommandArgumentPassing = 'Legacy'
  # Note: /machine argument omitted for brevity.
  runas /trustlevel:0x20000 'cmd /c start \"Custom Title\" powershell.exe -noprofile'
}

相关问题