powershell脚本通过param块声明参数,必须位于脚本开头(注释后、执行语句前);支持类型约束、默认值、必填设置、管道输入及值验证等特性。
powershell 脚本中声明并接收参数,主要靠 param 块实现,它必须放在脚本最开头(注释之后、任何可执行语句之前)。
基本语法:用 param 声明参数
在脚本顶部写一个 param 块,里面定义参数名,支持位置参数、命名参数、默认值和类型约束:
- 不带类型和默认值:
[string]$Name - 带默认值:
$Count = 10 - 带类型强制:
[int]$Port(传入非整数会报错) - 设为必填:
[Parameter(Mandatory)](配合类型或变量名一起用)
示例脚本 deploy.ps1:
param( [Parameter(Mandatory)] [string]$Env, [string]$Version = "1.0.0", [int]$Timeout = 30)Write-Host "环境:$Env,版本:$Version,超时:$Timeout 秒"调用方式:支持命名和位置两种传参
运行脚本时,可以按名称传参(推荐),也可以按顺序用位置参数(依赖 param 中的声明顺序):
- 命名方式(清晰、安全):
.\deploy.ps1 -Env "prod" -Version "2.1.0" - 位置方式(需严格对齐顺序):
.\deploy.ps1 "staging" "1.5.0" 60→ 对应 $Env, $Version, $Timeout - 混合使用也允许:
.\deploy.ps1 "dev" -Timeout 120
进阶技巧:支持管道输入和动态验证
如果希望参数能从管道接收(比如 "app1" | .\deploy.ps1),需加 ValueFromPipeline:
param( [Parameter(Mandatory, ValueFromPipeline)] [string]$AppName)process { Write-Host "正在部署:$AppName" }还可加校验逻辑,比如限制值范围:
param( [ValidateSet("dev","test","prod")] [string]$Env)常见注意事项
-
param必须是脚本第一个可执行结构(前面只能有注释或空行) - 未声明的参数不会自动捕获,
$args只保留未匹配的额外参数(不推荐依赖) - 想查看参数帮助,可在 param 上方加注释块,并用
Get-Help .\script.ps1查看 - 函数内同样用
param,规则一致











