gpt4 book ai didi

powershell - 我应该使用 [ValidateNotNullOrEmpty()] 然后在函数中查找空格,还是使用 [ValidateScript(...)]?

转载 作者:行者123 更新时间:2023-12-03 14:35:24 27 4
gpt4 key购买 nike

因为在 PowerShell 中没有

[ValidateNotNullOrWhiteSpace()]

参数属性,是不是更好用
[ValidateNotNullOrEmpty()]

作为参数属性,然后在函数内部寻找空格,或者我应该使用
[ValidateScript({ -not ([String]::IsNullOrWhiteSpace($_)) })]

作为参数属性。

我不确定 NotNullOrEmpty 属性的真正用处是什么,因为 99% 的时间,我都不希望它起作用:
My-Cmdlet -ParameterName " "

但因为 ""仍然是一个字符串,它会传递 NotNullOrEmpty 属性。

最佳答案

[ValidateNotNullOrEmpty()]有利于完全按照它所说的去做。

要回答您的第一个问题,我将使用 [ValidateScript(...)]你概述的方法。

要记住的一件事是 [ValidateScript()] 的错误消息通常很糟糕,对最终用户没有帮助。作为一种解决方法,您可以执行以下操作:

[ValidateScript( { 
![String]::IsNullOrWhiteSpace($_) -or throw 'Your string is null or contains whitespace'
} )]

您还可以在 throw 中包含一个异常类,例如:

throw [System.ArgumentException]'Blah blah whitespace'

为什么 -or throw语法有效

PowerShell 中的 bool 运算符的工作方式与许多其他语言一样,因为它们执行“快捷方式”。一旦结果确定,他们就停止评估表达式。所以对于 $false -and $(sleep -min 10)不需要 10 分钟,因为从不评估第二个 expr。

同样, $true -or $(something)不会评估第二个,因为如果第一个表达式为真,它将始终为真。

所以在这种情况下它是相似的。 ValidateScript需要一个 bool 值。如果我们关心的条件为真,它就会停在那里。如果不是,则计算第二个表达式,因为这是一个 throw它只会失败,但在这种情况下,您可以控制失败消息(如果需要,还可以控制异常类)。

关于powershell - 我应该使用 [ValidateNotNullOrEmpty()] 然后在函数中查找空格,还是使用 [ValidateScript(...)]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903955/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com