語法總覽
New-Alias [-Name] <String> [-Value] <String>
[-Description <String>]
[-Option {None | ReadOnly | Constant | Private | AllScope}]
[-PassThru]
[-Scope <String>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
參數詳細說明
| 參數 | 必要 | 預設 | 說明 |
-Name | 是 | - | 別名名稱,首字不得為數字 |
-Value | 是 | - | 目標 Cmdlet/函數/腳本名稱 (不含參數) |
-Description | 否 | 空 | 說明文字,含空格需加引號 |
-Option | 否 | None | 見下表 |
-PassThru | 否 | False | 輸出建立的 AliasInfo 物件到管線 |
-Scope | 否 | Local | Global / Local / Script 或相對數字 (0=當前, 1=父層) |
-Force | 否 | False | 同名存在時覆寫 (相當 Set-Alias 行為) |
-WhatIf | 否 | - | 模擬執行,不實際建立 |
-Confirm | 否 | - | 執行前提示確認 |
Option 選項對照
| 選項 | 行為 |
None | 預設,可修改、可移除、可見於所有子範圍 |
ReadOnly | 屬性鎖定,需 -Force 才能修改/移除 |
Constant | 永久鎖定,甚至 -Force 也無法變更 |
Private | 僅在指定 -Scope 可見,子範圍不可見 |
AllScope | 自動複製到所有子範圍 (Global 除外) |
常用範例
1. 基本別名
New-Alias -Name "list" -Value "Get-ChildItem"
# 等同
New-Alias list Get-ChildItem
2. 唯讀別名附描述
New-Alias -Name "w" -Value "Get-WmiObject" `
-Description "Quick WMI alias" `
-Option ReadOnly
Get-Alias w | Format-List * # 驗證屬性
3. 全域唯讀常用工具
New-Alias -Name "grep" -Value "Select-String" `
-Option AllScope -Scope Global
# 所有子範圍 (腳本、函數) 皆可用 grep
4. 臨時覆寫內建指令 (需 Force)
New-Alias -Name "dir" -Value "Get-ChildItem" -Force
# 原 dir 為 Get-ChildItem 別名,Force 覆寫無誤
5. 腳本內私有別名
# MyScript.ps1
New-Alias -Name "log" -Value "Write-Host" -Option Private -Scope Script
log "Only visible in this script"
# 呼叫端不受影響
持久化:跨 Session 保留別名
New-Alias 建立的別名僅存在於目前 Session,關閉視窗即消失。
匯出/匯入
# 匯出
Export-Alias -Path "$HOME\my-aliases.txt" -Force
# 或只匯出特定
Get-Alias list, w, grep | Export-Alias -Path "$HOME\my-aliases.txt"
# 匯入 (放入 $PROFILE)
Import-Alias -Path "$HOME\my-aliases.txt"
寫入 $PROFILE 自動載入
notepad $PROFILE
# 加入
Import-Alias "$HOME\my-aliases.txt" -ErrorAction SilentlyContinue
# 或直接在 Profile 定義
New-Alias -Name "list" -Value "Get-ChildItem" -Option AllScope -Scope Global
相關指令對照
| 用途 | 指令 |
| 建立/修改別名 | Set-Alias (存在則更新,不存在則建立) |
| 建立新別名 | New-Alias (存在報錯,除非 -Force) |
| 移除別名 | Remove-Item Alias:\Name 或 Remove-Alias (別名) |
| 查詢別名 | Get-Alias, gal |
最佳實務
- 命名慣例:小寫、簡短、易記、不與常用 Cmdlet 衝突 (如
gci 已是 Get-ChildItem 內建別名)。
- 文件化:善用
-Description,團隊共享 Export-Alias 檔案。
- 範圍控制:腳本內部別名用
-Option Private -Scope Script 避免汙染呼叫端。
- 唯讀保護:核心工具別名加
-Option ReadOnly 或 Constant 防誤改。
- 避免參數內嵌:
Value 僅接受命令名稱,參數需用函數/腳本包裝:
function mygrep { Select-String -Pattern $args[0] }; New-Alias mg mygrep
常見問題
| 問題 | 原因/解決 |
| 別名失效 | Session 結束未持久化 → 加入 $PROFILE 或 Import-Alias |
| 無法覆寫 | 目標為 Constant/ReadOnly → 先移除或用 Set-Alias -Force |
| 參數不生效 | 別名不支援參數預設值 → 改用函數/ScriptBlock |
| Tab 補全不出現 | 需 Import-Module 或重新載入 Profile |
結語
New-Alias 是 PowerShell 客製化體驗的基石。善用 Option、Scope、Description 與持久化機制,能建立個人/團隊專屬的指令語彙,大幅提升互動式操作與腳本撰寫效率。建議將常用別名集中管理於版控下的 AliasProfile.ps1,並在 $PROFILE 中 Import-Alias 或 . (dot-source) 載入,實現一致、可追蹤、可共享的環境設定。