我试图验证变量$var1
和$var2
的null或空值。有人能告诉我哪里做错了吗?testing.ps1
:
Param (
[ValidateNotNullOrEmpty()][String]$var1 = $defaultvar1,
[ValidateNotNullOrEmpty()][String]$var2 = $defaultvar2
)
Write-Host "Value of Variable 1 : $var1 "
Write-Host "Value of Variable 2 : $var2 "
字符串
输出量:
PS> **.\testing.ps1**
Value of Variable 1 :
Value of Variable 2 :
PS> **$defaultvar1=123**
PS> **$defaultvar2=678**
PS> **.\testing.ps1**
Value of Variable 1 : 123
Value of Variable 2 : 678
PS> **$defaultvar2=""**
PS> **.\testing.ps1**
Value of Variable 1 : 123
Value of Variable 2 :
型
2条答案
按热度按时间m2xkgtsf1#
正如Lee_Daily指出的那样:
参数 * 默认值不 * 验证**-假设您作为函数作者,将确保值是有效的。
一个简单的例子:
字符串
也就是说,
''
被愉快地接受为默认值,即使它与[ValidateNotNullOrEmpty()]
相矛盾。另外,你通常不应该使用 * 函数外部变量值 * 作为参数默认值,因为这会使函数的行为难以预测。
相反,用途:
$foo = 'bar'
)或
$foo = (Get-Date)
)也就是说,正如Mike Shepard指出的,*引用变量 * 是 * 一个选项, 如果 *:
ohtdti5x2#
我遇到了同样的问题。我的解决方案是验证两次:
字符串
ValidateNotNullOrEmpty
属性负责验证入站参数,而IsNullOrEmpty
处理defaultVar1
或defaultVar2
为空的边缘情况我发现这种模式在编写一个模块时很有用,在这个模块中,用户可以为常用的选项配置默认值。