私は文字列の電子メールアドレスを受け取り、[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アドレスをスクリプト本体に追加することができます。 [$($ _内の$アドレス){ if(![bool]($アドレス-as [System.Net.Mail.MailAddress])){ throw "$($ _)is an無効なメールアドレス " } } 返品$ true })] –
素晴らしい!私はあなたのために働いてうれしいです。 – Sync