Powershell ValidateLength-无最大长度

Powershell ValidateLength-无最大长度,powershell,Powershell,验证字符串参数的长度时: [Parameter(Mandatory=$false)] [ValidateLength(6,128)] [string]$value 是否可以不强制执行最大长度(仅限最小长度)?我试过: [ValidateLength(6,0)] 但这会产生运行时错误。不可能直接使用该属性 该属性的参数是[int]s,因此隐式地,您可以设置的最大值是[int]::MaxValue ,但不能直接使用该表达式,因为需要一个文本 因此,您可以对[int]:MaxValue的值进行硬编

验证字符串参数的长度时:

[Parameter(Mandatory=$false)]
[ValidateLength(6,128)]
[string]$value
是否可以不强制执行最大长度(仅限最小长度)?我试过:

[ValidateLength(6,0)]
但这会产生运行时错误。

不可能直接使用该属性

该属性的参数是
[int]
s,因此隐式地,您可以设置的最大值是
[int]::MaxValue

,但不能直接使用该表达式,因为需要一个文本

因此,您可以对
[int]:MaxValue
的值进行硬编码,但是
[int]
在不同的平台上从技术上讲可能大小不同(同样,一个2GB的字符串可能无法工作,因此硬编码2147483647可能不是最糟糕的事情)

我的测试脚本中有一个输入错误,我认为不能直接使用
[int]::MaxValue
,但事实证明并非如此(感谢Mathias让我返回并再次检查):

我在5.1版上进行了测试,但似乎这在v2中不起作用,我也不确定到底什么时候添加了支持


另一种可能性是使用脚本进行验证:

[ValidateScript( { $_.Length -ge 6 } )]
如果您想获得更好的错误消息,通常会有
throw
技巧:

[ValidateScript( { $_.Length -ge 6 -or $(throw [System.ArgumentException]"String must be at least 6 characters") } )]
此外,根据Bill和Ansgars的建议,您可以使用正则表达式验证:

[ValidatePattern('^.{6,}$')]

1) 使用非常非常长的最大长度。2) 使用
[ValidatePattern('.{6}.*')]
。(虽然错误并没有那么漂亮。)3)使用
[ValidateScript({$.Length-gt 5})]
(尽管错误的严重性也是一样。)4)检查函数中的最小长度,而不是参数属性中的最小长度,如果太短(即在运行时检查长度),则抛出错误。
[ValidateLength(max6,[int]::value
在我刚刚测试它时工作正常,即使是从PowerShell外部启动脚本时也是如此。另一种选择是
[ValidatePattern('^.{6,}$')]
。或者:在运行时检查长度,如果太短则抛出错误。(有让您自己编写错误消息的优点。)@Bill_Stewart喜欢很多东西,这取决于具体情况,但我想说我通常更喜欢参数验证:)
[int]::MaxValue
ValidateLength
的第二个参数的完美输入值,不必是文字value@MathiasR.Jessen不确定它何时生效,但在v2中失败。
[ValidatePattern('^.{6,}$')]