Win10文件夹Shift+右键菜单添加打开管理员Powershell窗口

版权声明:本文为博主原创文章,遵循 CC BY-SA 4.0 版权协议,转载请附上原文链接并采用相同方式共享。
本文链接:https://blog.csdn.net/PiPiSenLetsGo/article/details/86777087
 

2021年1月14日更新:
勘误:
之前忽略了"在此处打开管理员 Powershell 窗口(A)"中"(A)"的快捷键作用,其实对应在在注册表中应为"(&A)",下文已修改。另外,我决定把 A 改成 X,因为自动排列图标的快捷键是 A,然后我试验的时候鼠标划到了查看,结果就翻车了2333,还好桌面图标不多。
更新:
另外,其实在文件夹图标右击也可以打开 Powershell 窗口,更新一下,鸽了好久。
 

1 背景(可略过)

目前在调试 Python 程序,遇到了一个问题:当程序中包含多线程时,使用 IDLE 运行是不会执行多线程的语句的,在网上一顿搜罗了解到这种情况可以换成在命令行下执行。好像用 PyCharm 也可以,没有验证过。emmm,之前运行包含多线程的程序都是在 Linux 环境下(树莓派 Raspain、Ubuntu16.04、Ubuntu18.04)操作的,本身就是 dash 命令行。没想到 Windows 下还有这种问题。
命令行就命令行吧,所以我选择 Powershell。在我放程序的位置,直接 Shift+鼠标右键,在右键菜单里选择"在此处打开 Powershell 窗口(S)",这样就省了再去各种 cd 了。OK,运行程序吧。然后,哼哼,要是能直接成功的话,这篇博客也就不会出现了。Python 告诉我权限不够,那没办法,只好又打开管理员 Powershell,然后,各种 cd,对于这种操作,我是拒绝的。所以开始想办法,在文件目录下(包括桌面)通过 Shift+右键在当前位置打开管理员模式的 Powershell。变成下图这种效果。

右击
PS:背景就不改了,毕竟是写这篇博客的背景。所以上图是修改之前的,快捷键(其实没有)显示的还是 A。
下面进入正题。

2 折腾向(手撸注册表)

这种方式比较折腾,适合喜欢捣鼓的同学,简单的方法可以直接往下看简单粗暴向(合并注册表)。新手但又想尝试的同学可以先做好备份[3],老司机随意。

2.1 在文件夹内Shift+右键打开管理员Powershell窗口

2.1.1 打开注册表编辑器

单击开始,输入"regedit",进入注册表编辑器。如下图,我电脑系统是1809版本,所以又多出来了右边的框,可以右击注册表编辑器,固定到开始屏幕,方便下次使用。
注册表编辑器

2.1.2 进入编辑右键菜单的注册表分支

在路径下输入:HKEY_CLASSES_ROOT\Directory\Background\shell
进入相应分支。
路径

2.1.3 新建注册表项

2.1.3.1 创建菜单

(1)右击"shell"项,新建一个名为"PowershellAdmin"的项。
新建PowershellAdmin
(2)在"PowershellAdmin"项内:

  • a. 新建字符串值,命名为"Extended",数值数据为空。
    新建字符串值
    功能:使右键选项在平时不显示,在按下 Shift 时才会显示。
  • b. 新建字符串值,命名为"MUIVerb",双击该项修改数值数据为"在此处打开管理员 Powershell 窗口(&X)"。此处"&"的作用是使"X"作为该选项的快捷键,在右键菜单并不会出现"&"。
    功能:UI 嘛,界面啊,所以它就是为了让菜单中显示的是"在此处打开管理员 Powershell 窗口(X)",不添加的话,右击显示的就是"PowershellAdmin"项的名称。
    右击
    PS:这里我本来是也想在"(默认)"这个字符串值里直接来个"@shell32.dll"里面的字符串资源的,不过并没有找到(咱也不知道思路对不对,也不确定到底有没有),所以就用了这个方法。其实直接在"(默认)"里面写"在此处打开管理员 Powershell 窗口(&X)",这样也是可以的,不过我更喜欢前者。另外我试了一下,"MUIVerb"这个字符串的优先级是要比"(默认)"高的。
  • c. 新建字符串值,命名为"NoWorkingDirectory",数值数据为空。
    功能:emmm,我也不清楚,在网上查也查不到。"在此处打开 Powershell 窗口(S)"这条命令相关的注册表项里面有这个,我也就加上了,估计是和这个项相关的命令在哪可以生效执行有关系。
  • d. 新建DWORD(32位值)(D),命名为"ShowBasedOnVelocityId",数值数据为:基数十六进制(H) 的"639bc8"。

OK,以上几部执行完毕后,右侧看起来应该是这个样子滴
在这里插入图片描述

2.1.3.2 为菜单创建操作命令

菜单界面是有了,但还没有与之匹配的命令,没有 command 命令的话,这个菜单只是一个空壳,点击它会提示没有找到可以执行的应用程序。就像下面这样。
提示
接下来创建命令项。右击"PowershellAdmin"项,新建名为"command"的项。
在右侧的"(默认)"字符串里填入如下命令:

powershell.exe -command Start-Process powershell -ArgumentList \"-noexit\",\"Set-Location -literalPath '%V'\" -Verb runAs

命令释义:
  powershell.exe -command Start-Process powershell
    这部分是让普通的 Powershell 再打开一个 Powershell 进程。
  -ArgumentList “-noexit”,"Set-Location -literalPath ‘%V’"
    这部分是为新的 Powershell 进程指定了参数,-noexit,不退出窗口,Set-Location -literalPath ‘%V’,定位到当前位置。
  -Verb runAs
    使用"以管理员身份运行"选项启动新的 PowerShell 进程。
如此,就。。。大功告成!!!以上步骤都完成后,就可以实现在文件夹内通过 Shift+右键在当前位置打开管理员 Powershell 了。

2.2 在文件夹图标上Shift+右键打开管理员Powershell窗口

  • a. 首先进入编辑右键菜单的注册表分支。
      在路径下输入:HKEY_CLASSES_ROOT\Directory\shell
      进入相应分支。嗯,这项就在 2.1 的楼下的楼下。
      PS:其实在"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory"下也有相对应的分支,这两个位置无论改哪一个,另一个位置都会跟着变动。2.1 也是这样的。

  • b. 接下来的操作直接按照 2.1.3 再来一遍就可以了,这里不再赘述。

当然,不想折腾的话也可以使用下面这种方法。

3 简单粗暴向(合并注册表)

这种方法比较简单粗暴,直接合并注册表就可以了。
新建一个文本文档,复制下面的代码,选择另存为,文件类型选择为所有文件,编码选择 ANSI,文件名为"PowershellAdmin.reg"(文件名可以随便起,但是后缀名需要是".reg",表明它的文件类型是注册表项),然后双击"PowershellAdmin.reg"这个文件合并注册表,提示如下内容(根据保存位置路径可能会有所不同):
提示
点击是,然后提示"已成功添加到注册表中",OK,搞定!!!

以下三段代码按需取用。

  • 文件夹内Shift+右键打开管理员Powershell窗口
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\PowershellAdmin]
"Extended"=""
"NoWorkingDirectory"=""
"ShowBasedOnVelocityId"=dword:00639bc8
@=""
"MUIVerb"="在此处打开管理员 Powershell 窗口(&X)"

[HKEY_CLASSES_ROOT\Directory\Background\shell\PowershellAdmin\command]
@="powershell.exe -command Start-Process powershell -ArgumentList \\\"-noexit\\\",\\\"Set-Location -literalPath '%V'\\\" -Verb runAs"
  • 文件夹图标上Shift+右键打开管理员Powershell窗口
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\PowershellAdmin]
"Extended"=""
"NoWorkingDirectory"=""
"ShowBasedOnVelocityId"=dword:00639bc8
@=""
"MUIVerb"="在此处打开管理员 Powershell 窗口(&X)"

[HKEY_CLASSES_ROOT\Directory\shell\PowershellAdmin\command]
@="powershell.exe -command Start-Process powershell -ArgumentList \\\"-noexit\\\",\\\"Set-Location -literalPath '%V'\\\" -Verb runAs"
  • 文件夹内及文件夹图标上Shift+右键打开管理员Powershell窗口
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\PowershellAdmin]
"Extended"=""
"NoWorkingDirectory"=""
"ShowBasedOnVelocityId"=dword:00639bc8
@=""
"MUIVerb"="在此处打开管理员 Powershell 窗口(&X)"

[HKEY_CLASSES_ROOT\Directory\Background\shell\PowershellAdmin\command]
@="powershell.exe -command Start-Process powershell -ArgumentList \\\"-noexit\\\",\\\"Set-Location -literalPath '%V'\\\" -Verb runAs"

[HKEY_CLASSES_ROOT\Directory\shell\PowershellAdmin]
"Extended"=""
"NoWorkingDirectory"=""
"ShowBasedOnVelocityId"=dword:00639bc8
@=""
"MUIVerb"="在此处打开管理员 Powershell 窗口(&X)"

[HKEY_CLASSES_ROOT\Directory\shell\PowershellAdmin\command]
@="powershell.exe -command Start-Process powershell -ArgumentList \\\"-noexit\\\",\\\"Set-Location -literalPath '%V'\\\" -Verb runAs"

4 最终效果

4.1 Shift+右击菜单显示

  • a. 在文件夹内右键菜单
    在这里插入图片描述
    这里显示的是在桌面右击的效果。

  • b. 文件夹图标上右键菜单
    在这里插入图片描述

4.2 点击效果

首先会弹出来一个普通的 Powershell 窗口来执行命令,这个窗口会自动退出
普通的Powershell窗口
然后会弹出 UAC 用户账户控制窗口,点击确定后,会弹出管理员模式的 Powershell 窗口,并定位到当前路径
管理员Powershell窗口

5 参考资料

[1] Win10添加右键打开cmd和Powershell窗口(管理员/非管理员)
[2] Microsoft.PowerShell.Management.Start-Process
[3] Windows10文件目录下 Shift+右键菜单添加打开管理员Powershell窗口>"这种方式要用到注册表,不懂的同学建议做好备份,避免注册表出问题…"这波啊,这波是原地TP!

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值