首页 > 解决方案 > 在 shell 上下文菜单中的目录中运行 PowerShell,管理员模式

问题描述

我创建了一个 Explorer Shell 级联上下文菜单,用于使用下面显示的代码在目录中打开 PowerShell。(注意:我在 admin 命令中有一个硬编码的示例路径用于测试。)

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\powershell.exe]
"MUIVerb"=""
"SubCommands"="powershell;powershell_admin"
"Icon"="PowerShell.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\powershell]
@="Open PowerShell here"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\powershell\command]
@="powershell.exe -NoLogo -NoExit -Command Set-Location '%V'"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\powershell_admin]
@="Open PowerShell (admin) here"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\powershell_admin\command]
@="powershell.exe -Command 'Start-Process PowerShell -ArgumentList \"-NoLogo -NoExit -Command Set-Location C:\Python27\" -Verb RunAs'"

非管理员命令完美运行。admin 命令忽略 ArgumentList 中的所有内容。

如果我打开一个 PowerShell 并直接在单引号(')中执行代码,它就可以正常工作。例如:

Start-Process PowerShell -ArgumentList \"-NoLogo -NoExit -Command Set-Location C:\Python27\" -Verb RunAs

但是从上下文菜单执行时,它会以管理员模式打开,但会显示徽标并且不执行设置位置。

提前致谢

标签: powershellregistrywindows-explorer

解决方案


这是一个很酷的实用程序。我安装了注册表项进行实验,现在它正在工作,我可能会保留它。

在我的实验中,窗口立即关闭,甚至在它打开 UAC 对话框之前,直到我将外部命令用转义的双引号括起来,将内部参数括在单引号中。然后它适用于除 Program Files 下的文件夹之外的每个文件夹。为此,我们需要将 %v 括在单引号中,并双重转义围绕它的双引号:

@="powershell.exe -command \"start-process powershell.exe -ArgumentList \\\"-NoLogo -NoExit -Command Set-Location '%v'\\\"  -verb RunAs\""

我使用了 %v - 上下文文件夹名称,这似乎是您基于菜单标签“在此处打开 Powershell(管理员)”的初衷。

调试说明:

  • 对于实验,在 Regedit.exe 中进行更改并让导出功能根据需要添加转义字符会更容易一些
  • 在 Windows 10 中,您可以直接在 Regedit.exe 中进行更改,并且上下文菜单/操作会立即更新,我通过向菜单标签添加时间戳来确认这一点
  • 在其他版本的 Windows 中,可能需要停止并重新启动 explorer.exe

推荐阅读