powershell脚本参数可通过param块中声明.net类型实现数据约束,如[string]$name、[int]$count等,运行时自动验证并报错;支持[parameter]等属性增强控制,还可选声明outputtype。
powershell 中为脚本参数指定数据类型约束,就是在 param 块里用方括号包裹 .net 类型名,写在参数变量名前面。这样 powershell 会在调用时自动检查传入值是否能转成该类型,不匹配就报错,避免运行时意外。
基础写法:直接加类型声明
语法很简单:
-
[string]$Name—— 强制必须是字符串(或可转为字符串) -
[int]$Count—— 只接受整数,"42"会自动转,"abc"直接报错 -
[bool]$Enable—— 支持$true、$false、"true"、"1"等等,但"yes"不行 -
[datetime]$When—— 接受Get-Date、"2026-09-25"、"today"等合法日期表达式
常见类型与注意事项
常用类型包括 [string]、[int]、[bool]、[datetime]、[array]、[hashtable]。注意:
- 数组类型建议写成
[string[]](强类型数组),而不是[array];后者接受任意集合,但失去元素类型控制 -
[array]和@()创建的是弱类型容器,元素可以混用;而[int[]]要求所有元素都能转为 int,否则报错 - 类型声明不是装饰——它参与运行时验证,比如
[int]$Port = 8080后再赋$Port = "https"会立即失败
配合参数属性增强控制
类型约束常和 [Parameter] 属性组合使用,实现更精细的逻辑:
-
[Parameter(Mandatory)]+[string]:强制提供且必须是字符串 -
[ValidateScript({Test-Path $_})]:路径参数必须真实存在 -
[ValidateSet("Start","Stop","Restart")]:只允许几个固定字符串值 - 多个属性可叠加:
[Parameter(Mandatory)][ValidateNotNullOrEmpty()][string]$Name
返回值类型也可声明(可选)
虽然问题聚焦输入参数,但顺带提一句:函数输出类型也能标注,用 [OutputType('System.DateTime')] 放在 param 前面。这不影响执行,但支持 IDE 智能提示,对协作和维护有帮助。











