如何解決「為這個系統上已停用指令碼執行,所以無法載入…」

如何解決「為這個系統上已停用指令碼執行,所以無法載入…」

原因

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

而目前就是因為該執行原則設定為「限制」的狀態,因此當要執行腳本時,便會發生「為這個系統上已停用指令碼執行,所以無法載入…」的錯誤訊息。參考微軟的官方資訊,可以得知執行原則可以有以下幾種狀態:

AllSigned

  • 腳本可以執行。
  • 要求所有腳本和組態檔都由受信任的發行者簽署,包括您在本機電腦上撰寫的腳本。
  • 先提示您,再從尚未分類為受信任或未受信任的發行者執行腳本。
  • 執行已簽署但惡意腳本的風險。

Bypass

  • 未封鎖任何專案,而且沒有任何警告或提示。
  • 此執行原則是針對 PowerShell 腳本內建在較大應用程式中的組態所設計,或針對 PowerShell 是其本身安全性模型之程式的基礎組態所設計。

Default

  • 設定預設執行原則。
  • Restricted 適用于 Windows 用戶端。
  • Windows 伺服器的 RemoteSigned 

RemoteSigned

  • Windows 伺服器電腦的預設執行原則。
  • 腳本可以執行。
  • 需要來自受信任發行者的數位簽章,這些腳本和組態檔是從網際網路下載的,其中包含電子郵件和立即訊息程式。
  • 不需要在本機電腦上撰寫且未從網際網路下載的腳本上使用數位簽章。
  • 如果腳本已解除封鎖,請執行從網際網路下載且未簽署的腳本,例如使用 Unblock-File Cmdlet。
  • 從網際網路以外的來源執行未簽署的腳本,以及可能是惡意的已簽署腳本的風險。

Restricted

  • Windows 用戶端電腦的預設執行原則。
  • 允許個別命令,但不允許腳本。
  • 防止執行所有腳本檔案,包括格式化和組態檔 ( .ps1xml )、模組腳本檔案 ( .psm1 ) 和 PowerShell 設定檔 ( .ps1 )。

Undefined

  • 目前範圍中沒有設定執行原則。
  • 如果所有範圍內的執行原則為 Undefined ,有效的執行原則適用于 Restricted Windows 用戶端,而 適用于 Windows Server 的 RemoteSigned 

Unrestricted

  • 非 Windows 電腦的預設執行原則,無法變更。
  • 未簽署的腳本可以執行。 執行惡意腳本的風險。
  • 在執行不是來自近端內部網路區域的腳本和組態檔之前,先警告使用者。

確認目前狀態

透果以下指令可獲得目前的狀態

get-executionpolicy
# 目前的狀態為「Restricted」
get-executionpolicy -List
# 這個指令將列出系統中所有的執行原則設定,包括本地用戶、目前的用戶以及系統層級的設定。

解決方式

透過執行以下指令,即可變更執行原則。

Set-ExecutionPolicy RemoteSigned
或是
Set-ExecutionPolicy Default
# 執行完成後,可以透過剛才的指令確認原則是否變更成功。

記得,以上指令是在以系統管理員權限下,開啟PowerShell時執行才能變更!