背景
我有 cmdlet Send-MailMessage,它使用动态生成的 HTML 文件作为正文,使用 XML 文件作为所有其他配置。
XML 文件如下所示:
<root> ... <Emails> <Email id="statsEmail" SMTPSvr="mailrelay@domain.com"> <config> <from>lab@domain.com</from> <to>techgroup@domain.com</to> <to>techgroup1@domain.com</to> <cc>iWantItToo@domain.com</cc> <bcc>manager@domain.com</bcc> <subject>Statistics</subject> </config> </Email> ... </Emails> </root>
如果我像这样使用 Powershell 调用它: $config = $configXML.selectNodes("//Email[@id="statsEmail"]")
Send-MailMessage -SmtpServer $config.SMTPSvr `
-From $config.From `
-To $config.To -Cc $config.Cc -Bcc $config.Bcc `
-Subject $config.Subject `
-Attachments $attachArray `
-BodyAsHtml "$SCRIPT:htmlBody"
它工作得很好..
问题
如果经理决定他不再想被密件抄送,我只需从配置文件中删除密件抄送元素,对吗?错误,Powershell(非常正确)引发错误,因为我指定了 BCC 参数,并且 $config.bcc 与它所获得的 $null 差不多。
这是错误(以防有人问):
Send-MailMessage:无法验证参数“抄送”的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后再次尝试该命令。
+ CategoryInfo : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException
结论
我意识到我可以通过将 Send-MailMessage 放在嵌套的 if 中来解决这个问题,我只是好奇是否有更简洁的解决方案来动态添加/删除 Cc 和 Bcc 参数。