PowerShell 中可通过 [Alias()] 特性为自定义高级函数参数设置友好别名(如 -CN 代替 -ComputerName),但无法为内置 cmdlet 参数添加别名;Set-Alias 仅适用于命令级别,不作用于参数。
powershell 中不能直接为「命令参数」设置友好别名(比如把 -computername 变成 -cn 这种别名),但可以通过 自定义高级函数(advanced function)配合 [alias()] 特性,为函数的参数定义一个或多个别名。这是 powershell 原生支持、稳定可靠的方式。
✅ 正确做法:在函数参数上使用 [Alias()] 属性
function Get-ServerInfo {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[Alias('CN', 'Machine')]
[string]$ComputerName,
[Alias('Cred')]
[PSCredential]$Credential
)
Write-Host "查询服务器:$ComputerName"
}调用时这几种写法等效:
Get-ServerInfo -ComputerName 'SRV01' Get-ServerInfo -CN 'SRV01' Get-ServerInfo -Machine 'SRV01' Get-ServerInfo -Cred $myCred
⚠️ 注意:
[Alias()]只对自定义函数/脚本命令的参数生效,对内置 cmdlet(如Get-Process)的参数无效 —— 你无法修改Get-Process -Id的别名。
❌ 常见误解与限制
不能给内置命令参数加别名
比如Get-Process -Id 123中的-Id是 cmdlet 内置参数,PowerShell 不允许用户覆盖或重命名它。Set-Alias对参数无效Set-Alias只能为整个命令(cmdlet、函数、脚本)起别名,例如Set-Alias gps Get-Process,但它不作用于参数。别名不参与 Tab 补全(除非函数已导入)
如果函数定义在$PROFILE或模块中,且已加载,PowerShell 会识别[Alias()]并支持 Tab 补全对应参数名。
✅ 实用技巧:让别名更易发现
-
在函数帮助文档中说明别名:
.PARAMETER ComputerName 指定目标计算机名称。 别名:CN, Machine -
查看某函数支持哪些参数别名(需先加载函数):
(Get-Command Get-ServerInfo).Parameters.ComputerName.Aliases # 输出:CN, Machine
? 补充:想“模拟”参数别名的临时方案(不推荐)
如果你只是想简化输入,可封装成带默认参数的函数:
function gps-id { param($Id) Get-Process -Id $Id }
# 然后用:gps-id 123但这不是真正的参数别名,只是命令包装,灵活性和兼容性远不如 [Alias()]。
不复杂但容易忽略


















