跳轉至

建立 2026-09-19 更新 2026-09-19

變數與型別

變數用來暫存資料,型別決定這份資料能做什麼事(數字可以相加、字串可以串接、日期可以比較先後)。PowerShell 是動態型別語言,通常不需要宣告型別,但了解型別在背後怎麼運作,能避開許多「為什麼結果怪怪的」的狀況。

變數

變數名稱以 $ 開頭,用 = 指派值:

$name = 'Victor'
$age = 42
$isMember = $true

$name        # 直接輸入變數名稱就會顯示內容

變數名稱不分大小寫($Name$name 是同一個)。PowerShell 也提供一些內建的自動變數

變數 內容
$_ 管線中目前處理的那個物件(在 Where-ObjectForEach-Object 的大括號內)
$null 表示「沒有值」
$true$false 布林值
$PSVersionTable PowerShell 版本與環境資訊
$HOME 目前使用者的家目錄
$env:名稱 環境變數,例如 $env:PATH$env:USERNAME

五種最常用的型別

型別 說明 範例
[string] 文字 'hello'"hello"
[int] 整數 42
[double] 帶小數的數字 3.14
[bool] 布林值,只有真與假 $true$false
[datetime] 日期與時間 Get-Date

.GetType() 可以查出任何值的型別:

(42).GetType().Name       # Int32
'hi'.GetType().Name       # String
(Get-Date).GetType().Name # DateTime

字串

單引號與雙引號的差別是最常見的初學者困惑:

$name = 'Victor'

'Hello, $name'      # 單引號:原樣輸出,得到 Hello, $name
"Hello, $name"      # 雙引號:會展開變數,得到 Hello, Victor

雙引號字串中要放屬性或運算式,需要用 $( )(子運算式)包起來,否則只會展開變數本身:

$p = Get-Process | Select-Object -First 1
"名稱:$p.Name"       # 錯:只展開 $p,屬性 .Name 被當成一般文字
"名稱:$($p.Name)"    # 正確

常用的字串運算:

'a,b,c' -split ','                  # 拆成陣列:a  b  c
@('a','b','c') -join '-'            # 合併:a-b-c
'Hello World' -replace 'World','PowerShell'
'Total: {0:N2}' -f 1234.567         # 格式化:Total: 1,234.57
'hello'.ToUpper()                   # 方法:HELLO

多行文字用 here-string,以 @" 開頭、"@ 結尾(結尾符號必須獨佔一行且從第一欄開始):

$text = @"
第一行
第二行:$name
"@

數值與運算

10 + 3      # 13
10 / 3      # 3.33333333333333
10 % 3      # 1(餘數)
[math]::Round(10 / 3, 2)   # 3.33
1KB, 1MB, 1GB              # 1024, 1048576, 1073741824(內建的大小單位)

布林與 $null

if 判斷式中,下列值會被視為「假」:$false$null0、空字串 ''、空陣列。其他大多視為「真」。

日期

$now = Get-Date
$now.AddDays(7)                        # 七天後
$now.ToString('yyyy-MM-dd')            # 2026-09-19(依你執行的日期)
[datetime]'2026-12-31' - $now          # 兩個日期相減得到 TimeSpan(時間間隔)

型別轉換

PowerShell 會在需要時自動轉換型別,也可以用 [型別] 強制轉換:

[int]'42'            # 字串轉成整數 42
[datetime]'2026-01-01'
[string]123          # 整數轉成字串 '123'

自動轉換的規則以左邊的運算元為準,這是常見的陷阱:

'5' + 3     # 字串在左:得到 '53'(字串串接)
5 + '3'     # 整數在左:得到 8(數字相加)

限制變數型別

在變數前面加上型別,之後指派的值都會自動轉成該型別,轉不過去就報錯,能及早發現資料問題:

[int]$count = '10'    # 存進去的是整數 10
$count = 'abc'        # 報錯:無法將 abc 轉成 Int32

何時該寫型別

在函式的參數與腳本的關鍵變數上寫型別,可以擋住不合法的輸入;一次性的互動指令不必逐一標型別。

相關資料