修改執行原則,解決PowerShell禁止執行腳本

在Windows系統裡,PowerShell支援比傳統CMD命令列更豐富的命令和模組。然而,開發者可能會遇到PowerShell無法執行指令的問題,以下是我的經驗。

問題

我有個使用NPM管理的開發專案。為了升級這個專案的依賴套件版本,我在PowerShell裡定位到該專案路徑,執行npm-check-updates指令。然而,PowerShell傳回了錯誤訊息,提示“無法載入文件,因為在此系統上禁止執行腳本。

起初我以為是軟體環境配置不當。但之後我確認npm-check-updates以全域形式正確安裝,並且已在系統的環境變數中添加了它的路徑。我嘗試使用命令提示字元執行同樣的命令,居然能正常運作!然而,我不想放棄PowerShell運行命令的便利性。

根據錯誤提示訊息,我找到了處理辦法。

解決方法

在PowerShell執行這條指令:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

該指令立即生效,然後就可以在PowerShell正常執行NPM的各種全域指令。

解釋

是PowerShell的執行原則阻止了命令執行。

PowerShell的執行原則是一項安全功能,可控制載入組態檔和執行腳本的條件。此功能有助於防止執行惡意指令碼。

這裡可以查看有關PowerShell執行原則的詳細資料。

可透過以下命令,取得目前有效的執行原則:

Get-ExecutionPolicy

Windows客戶端系統的預設執行原則是Restricted,意味著防止執行所有腳本檔案,包括格式化和組態檔(.ps1xml)、模組腳本檔案(.psm1)和PowerShell配置檔(.ps1)。所以,NPM套件的全域指令就被PowerShell阻止執行。

如果要對指定的作用域設定執行原則,執行下列命令:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

其中,<PolicyName><scope>要替換為對應的值,可在上面連結的詳細資料中查詢。

前面的解決方法裡的那個指令,意思是對目前使用者應用RemoteSigned策略。這是一種以較小權限取得資格來執行腳本的方法。

如果要刪除目前使用者的執行原則,恢復系統預設狀態,可執行以下命令:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Profile picture

一個充滿好奇心的冒險家,喜愛科技與藝術。用文字記錄生活的點滴,分享觀察與思考、經驗與感想。無懼艱難險阻,幸福就在你我身邊。