从外壳上下文菜单中的目录中,以管理员模式运行PowerShell

时间:2019-01-07 17:00:22

标签: powershell registry windows-explorer

我创建了一个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'"

non-admin命令运行正常。 admin命令将忽略ArgumentList中的所有内容。

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

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

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

预先感谢

1 个答案:

答案 0 :(得分:0)

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

在我的实验中,该窗口甚至在打开UAC对话框之前就立即关闭,直到我将外部命令括在转义的双引号中并将内部参数括在单引号中。然后,除了“程序文件”下的所有文件夹外,该文件夹都可以正常工作。为此,我们需要将%v用单引号引起来,并用双引号将其周围的双引号引起来:

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

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

调试说明:

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