將 PowerShell 預設執行原則從 Restricted
改為 RemoteSigned
,解決「系統上已停用指令碼執行」的問題。
問題
在執行 Windows PowerShell 的 .ps1
指令稿時,出現「系統上已停用指令碼執行」的錯誤訊息,該如何解決?
. : 因為這個系統上已停用指令碼執行,所以無法載入 C:UsersUSERNAMEDocumentsWindows PowerShellprofile.ps1 檔案。如需詳細資訊,請參閱 about_Execution_Policies,網址為 https:/go.microsoft.com/fwlink/?LinkID=135170。 位於 線路:1 字元:3 + . 'C:UsersUSERNAMEDocumentsWindowsPowerShellprofile.ps1' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
解法
若執行 .ps1
指令稿卻出現這樣的錯誤訊息,表示目前 PowerShell 中的執行原則(Excution Policy)可能被設定為 Restricted
,不允許執行指令稿。
若想要讓 PowerShell 允許執行自己撰寫的 .ps1
指令稿,可依照以下步驟更改執行原則的設定。
Step 1
在 PowerShell 啟動捷徑上按下滑鼠右鍵,選擇以系統管理員身分執行 PowerShell。
Step 2
執行以下 PowerShell 指令,將執行原則設定為 RemoteSigned
:
Set-ExecutionPolicy RemoteSigned
變更執行原則之後,就可以正常執行自己撰寫的 .ps1
指令稿了。
討論
如果想要查詢目前 PowerShell 的執行原則設定值,可以執行以下 PowerShell 指令:
Get-ExecutionPolicy
RemoteSigned
如果想要將 PowerShell 的執行原則回復成預設的 Restricted
,可以執行:
Set-ExecutionPolicy Restricted
小鐵匠 表示:
變更執行原則可以透script來做嗎?
如果可以,該如何回應系統確定變更?
謝謝
hmml 表示:
powershell 在以下兩個路徑下都有執行檔:
(1) C:\Windows\SysWOW64\WindowsPowerShell\v1.0\
(2) C:\Windows\System32\WindowsPowerShell\v1.0\
a. 在功能表呼叫的執行檔,是執行(2)。
b. 用Excel的vba呼叫的執行檔,則是執行(1)。
當你進行b方法時,發現PS1被擋住,便透過google找到改原則的方法,
再用a方法叫出powrshell去改原則,將無助於解決問題,因為兩個方法
叫出的powershell根本不是同一個。
被莫名奇妙的問題折騰了好久。