Windows PowerShell Execution Policy
簡單來說:Windows PowerShell 的 Execution Policy 是一種安全機制,用來控制是否允許執行 PowerShell 腳本,以及腳本是否需要簽章。它不是完整的安全邊界,而是幫助使用者避免不小心執行惡意程式碼。
| 執行政策 | 說明 |
|---|---|
| Restricted | 預設值,不允許任何腳本執行,只能輸入命令。 |
| RemoteSigned | 本機建立的腳本可執行,從網路下載的腳本必須有受信任的簽章。 |
| AllSigned | 所有腳本都必須有受信任的簽章。 |
| Unrestricted | 允許所有腳本執行,但下載的腳本會有警告提示。 |
| Bypass | 完全不限制,沒有警告或阻擋。 |
| Undefined | 沒有設定,會回退到更高層級的政策。 |
Get-ExecutionPolicy
Get-ExecutionPolicy -List
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
Set-ExecutionPolicy Bypass -Scope Process
| 使用情境 | 建議政策 | 說明 |
|---|---|---|
| 本機開發測試 | RemoteSigned |
允許本機腳本執行,下載的腳本需簽章,安全性與便利性平衡。 |
| CI/CD 工作階段 (臨時 Session) | Bypass -Scope Process |
僅限當前工作階段,避免永久降低安全性。適合 pipeline 自動化。 |
| 團隊共用伺服器 | RemoteSigned 或 AllSigned |
確保所有人執行的腳本安全,避免惡意或未驗證的腳本。 |
| 快速 Debug 或緊急修復 | Bypass -Scope Process |
臨時放寬限制,完成後關閉 Session 即恢復安全。 |
| 高安全性環境 (金融、政府) | AllSigned |
強制所有腳本必須有受信任簽章,安全性最高。 |
powershell -ExecutionPolicy Bypass -File build.ps1
這樣只影響該次執行,不會改變系統全域設定。RemoteSigned,避免因政策不同導致腳本無法執行。Unrestricted 或 Bypass,否則容易被惡意腳本利用。👉 這樣你在 CI/CD pipeline 裡就能快速決定要用哪種政策,既能跑自動化腳本,又不會犧牲安全性。
| 錯誤情境 | 錯誤訊息/現象 | 解法 |
|---|---|---|
| 政策被 Group Policy 覆蓋 | Set-ExecutionPolicy 無效,或執行後仍顯示原本政策 |
使用 Get-ExecutionPolicy -List 檢查,若 MachinePolicy 或 UserPolicy 有值,代表被群組原則鎖定。需由系統管理員修改 GPO。 |
| 腳本被阻擋 (Restricted) | 執行 .ps1 檔案時顯示「此系統已停用腳本執行」 |
將政策改為 RemoteSigned 或在 pipeline 中使用 -ExecutionPolicy Bypass。 |
| 下載的腳本無法執行 | 從網路下載的 .ps1 檔案被阻擋 |
檢查檔案屬性,右鍵 → 內容 → 勾選「解除封鎖」。或使用 Unblock-File script.ps1。 |
| 臨時需要執行腳本 | 不想永久更改政策,但要跑一次腳本 | 使用:powershell -ExecutionPolicy Bypass -File script.ps1。僅影響該次執行。 |
| 不同使用者政策衝突 | 在同一台機器,不同帳號執行結果不同 | 使用 Get-ExecutionPolicy -List 檢查 CurrentUser 與 LocalMachine,分別設定即可。 |
| CI/CD pipeline 腳本失敗 | 腳本在 build agent 上被阻擋 | 在 pipeline YAML 或批次檔中指定:powershell -ExecutionPolicy Bypass -File build.ps1,避免永久修改 agent。 |
Get-ExecutionPolicy -List
Unblock-File .\script.ps1
Bypass -Scope Process 或在 pipeline 命令行指定,而不是全域修改。👉 這樣你就有一份「錯誤 → 解法」的速查表,遇到問題可以立刻定位。
Execution Policy 決策流程圖,讓你在遇到問題時可以快速判斷該怎麼處理。
┌───────────────────────────┐
│ 腳本無法執行? │
└───────────────┬───────────┘
│ 是
▼
┌───────────────────────────┐
│ 使用 Get-ExecutionPolicy │
│ 檢查目前政策 │
└───────────────┬───────────┘
│
┌───────────────────────┼─────────────────────────┐
▼ ▼ ▼
Restricted/AllSigned RemoteSigned Bypass/Unrestricted
│ │ │
▼ ▼ ▼
需要允許腳本? 腳本來源? 已允許,但仍失敗?
│ │ │
▼ ▼ ▼
設定 RemoteSigned 本機 → 可執行 檢查是否被 GPO 覆蓋
或在命令行指定 下載 → 需簽章 (Get-ExecutionPolicy -List)
Bypass -Scope Process
Get-ExecutionPolicy -List 看是哪個範圍在限制。powershell -ExecutionPolicy Bypass -File script.ps1,避免永久降低安全性。Unblock-File script.ps1 或解除封鎖屬性。RemoteSigned,避免不同人遇到不同錯誤。👉 有了這個流程圖,你就能在 CI/CD pipeline 或日常自動化中快速定位問題並解決。
Execution Policy 最佳實務清單 (Checklist),讓你或團隊在 CI/CD pipeline 與日常自動化中兼顧安全性與便利性。
RemoteSigned,允許本機腳本執行,下載的需簽章。-ExecutionPolicy Bypass -Scope Process,避免永久降低安全性。AllSigned,確保所有腳本都有受信任的簽章。Unrestricted 或全域 Bypass。powershell -ExecutionPolicy Bypass -File build.ps1
僅影響該次執行,不改變系統全域設定。Unblock-File .\script.ps1
Get-ExecutionPolicy -List
確認是否被 Group Policy 覆蓋。RemoteSigned)。👉 有了這份 checklist,你就能快速檢查並套用最佳實務,確保團隊自動化流程既安全又流暢。
範例 CI/CD YAML 片段,展示如何在 pipeline 中指定 ExecutionPolicy,讓腳本能順利執行而不影響系統全域設定。
steps:
- task: PowerShell@2
inputs:
targetType: 'filePath'
filePath: 'build.ps1'
arguments: '-ExecutionPolicy Bypass'
pwsh: true
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Run PowerShell script
run: |
powershell -ExecutionPolicy Bypass -File build.ps1
build_job:
stage: build
tags:
- windows
script:
- powershell -ExecutionPolicy Bypass -File build.ps1
Bypass 在這裡只影響 pipeline 執行,不會永久改變 agent 的設定。Unrestricted,保持系統安全。👉 有了這個範例,你就能直接把 ExecutionPolicy 控制嵌入到 CI/CD pipeline 裡,既能跑自動化腳本,又不會影響系統安全。
PowerShell 腳本安全最佳實務清單,讓你在自動化與 CI/CD pipeline 中兼顧安全性、可維護性與團隊透明度。
Set-AuthenticodeSignature)。AllSigned Execution Policy 強制簽章。-ExecutionPolicy Bypass -Scope Process,避免永久降低安全性。Unblock-File,並檢查來源。Get-ExecutionPolicy -List,確保沒有被惡意修改。👉 有了這份清單,你的團隊就能在自動化中保持安全、透明與可維護性。
安全腳本範本,展示如何在 PowerShell 腳本中整合 簽章檢查、錯誤處理 與 安全憑證讀取。這樣你在 CI/CD pipeline 或團隊自動化中就能兼顧安全性與可維護性。
<#
.SYNOPSIS
安全範本:簽章檢查 + 錯誤處理 + 安全憑證讀取
.DESCRIPTION
適用於 CI/CD pipeline 或團隊共用腳本。
#>
# 1. 簽章檢查
try {
$signature = Get-AuthenticodeSignature $PSCommandPath
if ($signature.Status -ne 'Valid') {
Write-Error "腳本簽章無效或缺失,請確認憑證。"
exit 1
}
} catch {
Write-Warning "無法檢查簽章:$_"
}
# 2. 錯誤處理 (全域)
$ErrorActionPreference = "Stop"
function Safe-Run {
param([ScriptBlock]$Block)
try {
& $Block
} catch {
Write-Error "執行失敗:$_"
exit 1
}
}
# 3. 安全憑證讀取 (避免硬編碼密碼)
try {
$credential = Get-StoredCredential -Target "MyService"
if (-not $credential) {
Write-Error "找不到憑證,請先在 Credential Manager 儲存。"
exit 1
}
} catch {
Write-Error "憑證讀取失敗:$_"
exit 1
}
# 4. 主流程
Safe-Run {
Write-Output "開始執行安全腳本..."
# 在這裡放置主要邏輯,例如 CI/CD 部署
# ...
Write-Output "腳本執行完成 ✅"
}
Safe-Run 函式可包裝任何任務,確保錯誤被捕捉並記錄。powershell -Command "Set-ExecutionPolicy Unrestricted -Scope LocalMachine -Force"
powershell -CommandSet-ExecutionPolicyUnrestricted-Scope LocalMachine-ForceRemoteSigned -Scope CurrentUser,兼顧安全與方便。Bypass -Scope Process,只影響當前流程,不會改整台電腦。Unrestricted -Scope LocalMachine,因為安全風險較高。👉 簡單來說:
這個指令會 在整台電腦上,永久允許所有使用者執行任何 PowerShell 腳本,而且不再要求簽章。它很強大,但也很危險。
Execution Policy 的種類,並且提供 不同 Scope 的差異表,再附上範例指令,讓你在 CI/CD 或本機環境都能靈活使用。
| 執行原則 | 說明 |
|---|---|
| Restricted | 預設值,禁止執行任何腳本。 |
| AllSigned | 所有腳本必須由受信任的發行者簽署。 |
| RemoteSigned | 本機建立的腳本可執行;下載的腳本需有簽章。 |
| Unrestricted | 可執行所有腳本,但下載的腳本會跳出警告。 |
| Bypass | 完全不阻擋、不警告,所有腳本都能執行。 |
| Undefined | 移除目前範圍的設定,回到更高層級的預設值。 |
| Scope | 影響範圍 | 特性 |
|---|---|---|
| Process | 只影響目前 PowerShell 進程 | 關閉後就失效,常用於 CI/CD pipeline |
| CurrentUser | 只影響目前使用者 | 寫入使用者設定檔,持久有效 |
| LocalMachine | 影響整台電腦所有使用者 | 需管理員權限,最強制 |
powershell -Command "Set-ExecutionPolicy Bypass -Scope Process -Force"
powershell -Command "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force"
powershell -Command "Set-ExecutionPolicy Unrestricted -Scope LocalMachine -Force"
Get-ExecutionPolicy -List
💡 建議做法
Bypass + Process,避免受系統策略影響。RemoteSigned + CurrentUser,兼顧安全與方便。| File5 | File | Last Modified |
|---|---|---|
| windows batch file with path name | windows batch file with path name | 1:26 AM - December 07, 2025 |
| Untitled | Untitled | 1:25 AM - December 07, 2025 |
| Everything極高速Windows 檔案搜尋工具 | Everything極高速Windows 檔案搜尋工具 | 1:25 AM - December 07, 2025 |
| Windows多種命令列工具搜尋檔案 | Windows多種命令列工具搜尋檔案 | 8:21 PM - December 06, 2025 |
| Windows 如何用where找檔案 | Windows 如何用where找檔案 | 8:21 PM - December 06, 2025 |