首页 > 解决方案 > 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 中包含参数,就像我在上面尝试完成的那样?如果是这样,怎么做?

标签: powershellif-statementparameterscmdlet

解决方案


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

推荐阅读