如何解決「為這個系統上已停用指令碼執行,所以無法載入…」
如何解決「為這個系統上已停用指令碼執行,所以無法載入…」
原因
PowerShell 的執行原則是一項安全功能,可控制 PowerShell 載入組態檔和執行腳本的條件。 此功能有助於防止執行惡意指令碼。
而目前就是因為該執行原則設定為「限制」的狀態,因此當要執行腳本時,便會發生「為這個系統上已停用指令碼執行,所以無法載入…」的錯誤訊息。參考微軟的官方資訊,可以得知執行原則可以有以下幾種狀態:
AllSigned
Bypass
Default
RemoteSigned
- Windows 伺服器電腦的預設執行原則。
- 腳本可以執行。
- 需要來自受信任發行者的數位簽章,這些腳本和組態檔是從網際網路下載的,其中包含電子郵件和立即訊息程式。
- 不需要在本機電腦上撰寫且未從網際網路下載的腳本上使用數位簽章。
- 如果腳本已解除封鎖,請執行從網際網路下載且未簽署的腳本,例如使用
Unblock-File
Cmdlet。 - 從網際網路以外的來源執行未簽署的腳本,以及可能是惡意的已簽署腳本的風險。
Restricted
- Windows 用戶端電腦的預設執行原則。
- 允許個別命令,但不允許腳本。
- 防止執行所有腳本檔案,包括格式化和組態檔 (
.ps1xml
)、模組腳本檔案 (.psm1
) 和 PowerShell 設定檔 (.ps1
)。
Undefined
- 目前範圍中沒有設定執行原則。
- 如果所有範圍內的執行原則為 Undefined ,有效的執行原則適用于 Restricted Windows 用戶端,而 適用于 Windows Server 的 RemoteSigned 。
Unrestricted
- 非 Windows 電腦的預設執行原則,無法變更。
- 未簽署的腳本可以執行。 執行惡意腳本的風險。
- 在執行不是來自近端內部網路區域的腳本和組態檔之前,先警告使用者。
確認目前狀態
透果以下指令可獲得目前的狀態
get-executionpolicy
get-executionpolicy -List
解決方式
透過執行以下指令,即可變更執行原則。
Set-ExecutionPolicy RemoteSigned
或是
Set-ExecutionPolicy Default
記得,以上指令是在以系統管理員權限下,開啟PowerShell時執行才能變更!