PowerShell脚本通过Param()块定义参数,需置于脚本开头,支持类型声明、默认值、Mandatory属性及ValidateSet等验证,实现命名/位置调用、开关参数和自动类型转换。
powershell 脚本通过 param() 块定义输入参数,这是最标准、最可控的方式。它让脚本支持命名参数、类型校验、默认值和强制要求等关键功能,比依赖 $args 更清晰可靠。
基本语法和位置
Param 块必须放在脚本最开头(可选空行或注释之后,但不能有执行语句),格式为:
- 以
Param(开始,)结束 - 括号内用逗号分隔多个参数声明,例如:
[string]$Name, [int]$Port - 每个参数可带类型标注(推荐),也可省略(如
$Path),但会失去自动类型转换和错误拦截能力
支持常见参数特性
Param 块天然兼容 PowerShell 的高级参数行为:
-
命名调用:运行时可用
.\script.ps1 -Name "Server01" -Port 8080,支持 Tab 补全参数名 -
位置调用:若不写参数名,按 Param 中顺序依次赋值,如
.\script.ps1 "Server01" 8080等价于上例 -
开关参数:用
[switch]$Quiet声明,脚本中直接判断$Quiet是$true还是$false,调用时只需加-Quiet,无需赋值
设置默认值与交互式输入
参数值不是必须由用户传入,可通过以下方式兜底:
- 直接赋默认值:
[string]$ComputerName = "localhost",用户不提供时自动使用 - 运行时提示输入:
[int]$EventID = Read-Host "请输入事件ID",适合手动执行场景(注意:不可用于无人值守自动化) - 结合
Mandatory = $true属性(需配合[Parameter()]修饰符)可强制用户必须提供该参数,否则报错中断
类型声明的实际作用
写 [string] 或 [int] 不只是为了说明用途,更是运行时的“守门人”:
- 用户传入
"abc"给[int]$Count,PowerShell 会尝试转换;失败则直接报错,阻止脚本继续执行错误逻辑 - 传入
42或"42"都能成功转成整数,提升兼容性 - 对
[ValidateSet("Full","Diff")]这类验证属性也必须基于明确类型才生效


















