使用变量将参数传递给 powershell 中的 cmdlet

Using variables to pass arguments to a cmdlet in powershell

我正在尝试在 powershell 中编写一个小脚本,特别是使用 exchange。它所做的只是询问发件人 and/or 收件人,然后根据指定日期或最近 30 天的日期反馈跟踪日志。

我正在尝试使用开关来检查哪些变量已完成,然后在变量中生成参数,然后将其传递给 cmdlet,但这失败了 "A positional parameter cannot be found that accepts argument".

手动输入带有变量内容的命令完成,但使用变量本身甚至没有超出开关

Switch ($i) { 
'1' {$x = "-Sender $sender -Start $date"}
'2' {$x = "-recipient $recipient -Start $date"}
'3' {$x = "-Sender $sender -Recipient $Recipient -Start $date"}
}

Get-MessageTrackingLog $x | Select timestamp, ServerHostName, Sender, recipients, MessageSubject, eventID, EventData | Out-GridView 

这是脚本中失败的部分。 $i 是一个基于

向上计数的变量
if (!($sender)) {$i = $i}
else {$i = $i + 1}
if (!($recipient)) {$i = $i}
else {$i = $i + 2}

这可能不是最理想的解决方案,但效果很好。

我知道我可以让开关 运行 整个命令,这有效,但我试图避免这种情况,以便我可以根据需要添加到脚本中

您需要使用 invoke-expression cmdlet(iex 是别名)这样调用它:

iex "Get-MessageTrackingLog $x" | Select timestamp, ServerHostName, Sender, recipients, MessageSubject, eventID, EventData | Out-GridView