ValidateRange 是 PowerShell 中用于强制数值型参数在指定闭区间内的内置验证属性。它要求参数值必须落在给定最小值与最大值之间(含端点),仅支持标量类型如 [int]、[double]、[datetime],不支持数组或自定义错误消息。
validaterange 是 powershell 中用于参数验证的内置属性,它能强制函数或脚本块的数值型参数(如 [int]、[double]、[long] 等)必须落在指定的最小值与最大值之间。超出范围会直接报错并阻止命令执行。
基本用法:在参数声明中添加 ValidateRange
只需在参数前加上 [ValidateRange(最小值, 最大值)] 属性即可。注意两个值都必须是可转换为该参数类型的常量(不能是变量或表达式)。
- 支持整数、浮点数、日期(需配合
[datetime]),但最常用的是数值类型 - 最小值和最大值本身也包含在允许范围内(闭区间)
- 若只限制下限或上限,可用
[ValidateRange(0, [int]::MaxValue)]或[ValidateRange([int]::MinValue, 100)]
实际例子:定义一个带范围检查的函数
下面这个函数要求 -Age 参数必须是 0 到 120 之间的整数:
function Set-PersonInfo {
param(
[Parameter(Mandatory)]
[string]$Name,
<pre class="brush:php;toolbar:false;"> [ValidateRange(0, 120)]
[int]$Age
)
"Hello $Name, you are $Age years old."}
调用时:
✅ Set-PersonInfo -Name "Alice" -Age 25 —— 正常执行
❌ Set-PersonInfo -Name "Bob" -Age -5 —— 报错:"The value -5 is out of range..."
常见注意事项
使用 ValidateRange 时容易忽略几个关键点:
- 它只对参数类型匹配的值生效;如果传入字符串如
"abc",会在类型转换阶段先报错,不会走到范围验证 - 不支持自定义错误消息,出错提示固定格式;如需更友好的提示,可结合
throw或ValidateScript - 对
[double]类型也有效,例如[ValidateRange(0.1, 99.9)] [double]$Score - 不能用于非标量参数(如数组),若想校验数组每个元素,需用
ValidateScript
替代方案:需要更灵活控制时用 ValidateScript
当要实现非连续范围(如“只能是 1、5 或 10”)、依赖其他参数、或需要自定义提示时,ValidateScript 更合适:
[ValidateScript({
$_ -ge 0 -and $_ -le 120 -and $_ % 1 -eq 0 # 还额外确保是整数
})]
[int]$Age
ValidateRange 简洁高效,适合明确的数值边界控制,用对场景就能少写验证逻辑,让参数更健壮。











