第 8 章

PowerShell 腳本入門:.ps1、執行政策、常見問題

本章重點

  • 了解什麼是 .ps1 腳本檔案
  • 學會建立與執行第一個腳本
  • 認識參數與函式的寫法
  • 知道如何處理常見的執行錯誤

什麼是 .ps1 腳本?

把多個 PowerShell 指令存成一個 .ps1 檔案, 就是一個腳本。每次執行這個檔案,就會依序執行裡面所有的指令。

腳本適合用在:重複性工作、需要多個步驟的操作、定時自動執行的任務。

建立第一個腳本

用任何文字編輯器(記事本、VS Code 都可以)建立 hello.ps1

# hello.ps1
Write-Output "Hello, PowerShell!"
Write-Output "現在時間:$(Get-Date)"
Get-ChildItem $env:USERPROFILE | Select-Object -First 5

存檔後,在 PowerShell 執行:

# 用相對路徑執行(必須加 .\)
.\hello.ps1

# 用絕對路徑執行
C:\scripts\hello.ps1
一定要加 .\ 執行同一個資料夾的腳本,名稱前面必須加 .\, 直接輸入 hello.ps1 會找不到。

加入參數

# greet.ps1
param(
    [string]$Name = "朋友",
    [int]$Times = 1
)

for ($i = 0; $i -lt $Times; $i++) {
    Write-Output "你好,$Name!"
}

執行時傳入參數:

.\greet.ps1 -Name "Jack" -Times 3

函式(Function)

# 定義函式
function Say-Hello {
    param([string]$Name)
    Write-Output "你好,$Name!"
}

# 呼叫函式
Say-Hello -Name "Alice"
Say-Hello "Bob"

# 有回傳值的函式
function Add-Numbers {
    param([int]$A, [int]$B)
    return $A + $B
}

$result = Add-Numbers -A 10 -B 20
Write-Output "結果:$result"

錯誤處理

# 設定遇到錯誤就停止
$ErrorActionPreference = "Stop"

# try / catch 捕捉錯誤
try {
    Get-Content "不存在的檔案.txt"
} catch {
    Write-Output "發生錯誤:$($_.Exception.Message)"
} finally {
    Write-Output "不管有沒有錯,這裡都會執行"
}

常見執行問題

  • 「無法執行腳本」:執行政策限制,參考第 3 章設定 RemoteSigned
  • 「找不到路徑」:確認你在正確的資料夾,加上 .\
  • 「存取被拒」:以系統管理員身分重新開啟 PowerShell
  • 中文亂碼:存檔時選 UTF-8(無 BOM)編碼
小練習:
  1. 建立 info.ps1,內容包含:顯示電腦名稱、目前使用者、PowerShell 版本
  2. 執行它:.\info.ps1
  3. 加入 param 讓使用者可以傳入一個 $Message 顯示在最後
# 參考:顯示系統資訊
Write-Output "電腦名稱:$env:COMPUTERNAME"
Write-Output "使用者:$env:USERNAME"
Write-Output "PowerShell 版本:$($PSVersionTable.PSVersion)"

小結

腳本就是把指令存成 .ps1 檔案。 用 param 接收參數,用 function 封裝邏輯, 用 try/catch 處理錯誤。 這些是寫出實用腳本的基礎。

下一章,把這些技巧組合成真實的小自動化。