gpt4 book ai didi

powershell - 动态向Powershell cmdlet添加参数

转载 作者:行者123 更新时间:2023-12-04 13:16:49 25 4
gpt4 key购买 nike

背景
我有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 : Cannot validate argument on parameter 'Cc'. The argument is null or empty. Supply an argument that is not null or empty and then try the command again.
+ CategoryInfo : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException



结论
我意识到我可以通过将Send-MailMessage放入嵌套的方式来解决此问题,我只是好奇是否有一种更干净的解决方案来动态添加/删除Cc和Bcc参数。

最佳答案

创建一个哈希表,其中包含要发送到该cmdlet的所有参数和值,然后将其“splat”发送给该cmdlet。这将使您对发送的参数和值进行编程控制,并以易于阅读的格式(对于人类)显示它们,如以下示例所示:

# Define the parameters and values to give to Send-MailMessage.
$parameters = @{
From = $config.From
...
To = $config.To
}

# Check if $config.BCC is null. If it isn't, add it to the hashtable.
if ($null -ne $config.Bcc) {
$parameters.Add("BCC", $config.Bcc)
}

# Call Send-MailMessage with all of our prepared parameters.
Send-MailMessage @parameters

关于powershell - 动态向Powershell cmdlet添加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186472/

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