powershell - PowerShell cmdlet 参数列表中的 if 语句
问题描述
Send-Message `
-From $emailAuthUser `
-To $($emailTo -split ',') `
if($emailCC -ne "NA") { -CC $($emailCC -split ',') } `
-Subject $emailSubject `
-Body $emailBody `
-Attachments $attachments `
-ReplyTo $($emailReplyTo -split ',') `
-SmtpServer $emailSmtpServer `
-Port $emailSmtpPort `
-Credential $creds `
-UseSsl
错误:找不到接受参数“if”的位置参数。
有没有一种简单的方法可以选择在“内置”cmdlet 中包含参数,就像我在上面尝试完成的那样?如果是这样,怎么做?
解决方案
Splatting 是执行复杂参数传递的首选方式。您可以将参数存储在哈希表中,然后使用 IF 块添加到哈希表中。然后将散列添加到您的命令中。
$Params = @{
From = $emailAuthUser;
To = $($emailTo -split ',');
Subject = $emailSubject;
Body = $emailBody;
Attachments = $attachments;
ReplyTo = $($emailReplyTo -split ',');
SmtpServer = $emailSmtpServer;
Port = $emailSmtpPort;
Credential = $creds;
UseSsl = $True;
}
if($emailCC -ne "NA") { $Params['CC'] = ($emailCC -split ',') }
Send-Message @Params
推荐阅读
- c++ - 在不复制的情况下返回 std::function
- node.js - IBM Watson Speech-to-Text“识别音频”方法?
- java - Java Itext PDF - 我可以更改 AcroFields 的输入行吗?
- c - 将 nodemcu 与 000webhost 数据库连接
- javascript - 在 eventListener 中使用 .replace() 来更改某些文本,但无法正常工作
- sas - 如何标记一个重量序列,一旦超过30个重量,剩下的标记为1?
- go - 使用具有 OOP 风格的 fyne 小部件
- javascript - 低比例模型不在 THREE.js 中绘制
- regex - 正则表达式(第一次匹配后全部(没有第一次匹配))
- java - Spring 3:推迟 bean 实例化