實現在文件目錄下(包括桌面)通過 Shift+右鍵打開管理員模式的 Powershell 視窗 ...
背景(可略過)
目前在調試 Python 程式,遇到了一個問題:當程式中包含多線程時,使用 IDLE 運行是不會執行多線程的語句的,在網上一頓搜羅瞭解到這種情況可以換成在命令行下執行。好像用 PyCharm 也可以,沒有驗證過。emmm,之前運行包含多線程的程式都是在 Linux 環境下(樹莓派 Raspain、Ubuntu16.04、Ubuntu18.04)操作的,本身就是 dash 命令行。沒想到 Windows 下還有這種問題。
命令行就命令行吧,所以我選擇 Powershell。在我放程式的位置,直接 Shift+滑鼠右鍵,右鍵菜單里在此處打開 Powershell 視窗(S),這樣就省了再去各種 cd 了。OK,運行程式吧。然後,哼哼,要是能直接成功的話,這篇博客也就不會出現了。Python 告訴我許可權不夠,那沒辦法,只好又打開管理員 Powershell,然後,各種 cd,對於這種操作,我是拒絕的。所以開始想辦法,在文件目錄下(包括桌面)通過 Shift+右鍵打開管理員 Powershell。變成下圖這種效果。
下麵進入正題。
折騰向
這種方式比較折騰,適合喜歡搗鼓的同學,簡單的方法可以直接往下看簡單粗暴向
1 打開註冊表編輯器
單擊開始,輸入 regedit ,進入註冊表編輯器。如下圖,我電腦系統是1809版本,所以又多出來了右邊的框,可以右擊註冊表編輯器,固定到開始屏幕,方便下次使用。
2 進入編輯右鍵菜單的註冊表分支
在路徑下輸入:HKEY_CLASSES_ROOT\Directory\Background\shell
進入相應分支。
3 新建註冊表項
3.1 創建菜單
(1)右擊 shell 項,新建一個名為 PowershellAdmin 的項。
(2)在 PowershellAdmin 項內:
- 新建字元串值,命名為 Extended,數值數據為空。
功能:使右鍵選項在平時不顯示,在按下 Shift時才會顯示。 - 新建字元串值,命名為 MUIVerb,雙擊該項修改數值數據為:在此處打開管理員 Powershell 視窗(A)
功能:UI 嘛,界面啊,所以它就是為了讓菜單中顯示的是“在此處打開管理員 Powershell 視窗(A)”,不添加的話,右擊是這個樣子滴。
顯示的就是 PowershellAdmin 項的名稱。
PS:這裡我本來是想在 (預設) 這個字元串值里直接 @shell32.dll 裡面的字元串資源的,無奈沒有找到相應的字元串(不一定沒有哈),所以就用了這個方法。其實直接在 (預設) 裡面寫“在此處打開管理員 Powershell 視窗(A)”,這樣也是可以的,不過我更喜歡前者。 - 新建字元串值,命名為 NoWorkingDirectory,數值數據為空。
功能:emmm,我也不是很清楚,在網上查也查不到。“在此處打開 Powershell 視窗(S)”這條命令相關的註冊表項裡面有這個,我也就加上了,估計是和這個項相關的命令在哪可以生效執行有關係。 - 新建 DWORD(32位值)(D),命名為 ShowBasedOnVelocityId,數值數據為:基數十六進位(H)的 639bc8
OK,以上幾部執行完畢後,右側看起來應該是這個樣子滴
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 進程。
如此,就。。。大功告成!!!以上步驟都完成後,就可以實現在當前位置打開管理員 Powershell 了。當然,不想折騰的話也可以使用下麵這種方法。
簡單粗暴向
這種方法比較簡單粗暴,直接合併註冊表就可以了。
新建一個文本文檔,複製下麵的代碼,選擇另存為,文件類型為所有文件,編碼選擇ANSI,文件名為PowershellAdmin.reg(文件名可以隨便起,但是尾碼名需要是.reg,表明它的文件類型是註冊表項),然後雙擊 PowershellAdmin.reg 合併註冊表,提示如下內容:
點擊是,然後提示“已成功添加到註冊表中”,歐克,搞定!!!
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\PowershellAdmin] "Extended"="" "NoWorkingDirectory"="" "ShowBasedOnVelocityId"=dword:00639bc8 @="" "MUIVerb"="在此處打開管理員 Powershell 視窗(A)" [HKEY_CLASSES_ROOT\Directory\Background\shell\PowershellAdmin\command] @="powershell.exe -command Start-Process powershell -ArgumentList \\\"-noexit\\\",\\\"Set-Location -literalPath '%V'\\\" -Verb runAs"
最終效果
Shift+右擊菜單
點擊效果
首先會彈出來一個普通的 Powershell 視窗來執行命令,這個視窗會自動退出
然後會彈出UAC用戶賬戶控制視窗,點擊確定後,會彈出管理員模式的 Powershell 視窗,並定位到當前路徑
參考資料
Win10添加右鍵打開cmd和Powershell視窗(管理員/非管理員)
Microsoft.PowerShell.Management.Start-Process