小编And*_*Ful的帖子

动态地将参数添加到Powershell cmdlet

背景
我有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>
Run Code Online (Sandbox Code Playgroud)

如果我用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"
Run Code Online (Sandbox Code Playgroud)

它工作得很好..

问题
如果经理然后决定他不再想要被BCC,我只是从配置文件中删除BCC元素吗?错误,Powershell(非常正确)抛出错误,因为我指定了BCC参数,$ config.bcc大约为$ null.

这是错误(只是有人要求):

Send-MailMessage:无法验证参数'Cc'的参数.参数为null或空.提供非null或空的参数,然后再次尝试该命令.
+ CategoryInfo:InvalidData :( :) [Send-MailMessage],ParameterBindingValidationException

结束语
我意识到我可以通过将Send-MailMessage置于嵌套中来解决这个问题,我只是好奇是否有更清晰的解决方案来动态添加/删除Cc和Bcc参数.

powershell powershell-3.0

5
推荐指数
1
解决办法
3579
查看次数

标签 统计

powershell ×1

powershell-3.0 ×1