1
我有一個簡單的函數,它接收字符串電子郵件地址並使用[System.Net.Mail.MailAddress]驗證它們。如果我嘗試將不符合ValidateScript的數據添加到函數體中的$ EmailAddress變量,它將拋出錯誤,如再次觸發ValidateScript。爲什麼PowerShell再次觸發參數驗證?
function Set-EmailAddresses
{
[CmdletBinding()]
[Alias()]
Param
(
# Param1 help description
[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=1)]
[ValidateScript({
foreach ($address in $_) {
if ([bool]($address -as [System.Net.Mail.MailAddress])) {
return $true
}
else {
throw "Invalid email address(es)."
}
}
})]
[string[]]
$EmailAddresses
)
Begin
{
}
Process
{
$EmailAddresses += "NotASMTPAddress"
return $true
}
End
{
}
}
執行功能,提供有效的電子郵件地址。
Set-EmailAddresses -EmailAddresses [email protected]
當我嘗試添加不符合ValidateScript的數據時,會引發錯誤。
Invalid email address(es).
At line:15 char:21
+ throw "Invalid email address(es)."
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Invalid email address(es).:String) [], RuntimeException
+ FullyQualifiedErrorId : Invalid email address(es).
如果我改變身體傳遞ValidateScript它的作品。
function Set-EmailAddresses
{
[CmdletBinding()]
[Alias()]
Param
(
# Param1 help description
[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=1)]
[ValidateScript({
foreach ($address in $_) {
if ([bool]($address -as [System.Net.Mail.MailAddress])) {
return $true
}
else {
throw "Invalid email address(es)."
}
}
})]
[string[]]
$EmailAddresses
)
Begin
{
}
Process
{
$EmailAddresses += "[email protected]"
return $true
}
End
{
}
}
回來沒事。
Set-EmailAddresses -EmailAddresses [email protected]
True
這工作得很好。
function Set-EmailAddresses
{
[CmdletBinding()]
[Alias()]
Param
(
# Param1 help description
[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=1)]
[ValidateScript({
foreach ($address in $_) {
if ([bool]($address -as [System.Net.Mail.MailAddress])) {
return $true
}
else {
throw "Invalid email address(es)."
}
}
})]
[string[]]
$EmailAddresses
)
Begin
{
}
Process
{
$alias = $EmailAddresses
$alias += "NotASmtpAddress"
return $true
}
End
{
}
}
沒有錯誤拋出。
Set-EmailAddresses -EmailAddresses [email protected]
True
是的,就是這樣,我將驗證更改爲以下,現在我可以在腳本主體中添加無效的SMTP地址。如果(![bool]($ address -as [System.Net.Mail.MailAddress])){ throw「$($ _)是一個$($ _)是一個$ {$ _ $}無效的電子郵件地址。「 } } return $ true })] –
太棒了!我很高興它爲你工作。 – Sync