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

时间:2015-03-04 14:40:48

标签: powershell exchange-server

我试图在powershell中编写一个小脚本,特别是使用交换。它只是要求发件人和/或收件人,然后根据指定的日期或最近30天的日期反馈跟踪日志。

我试图使用开关来检查哪些变量已完成,然后在变量中生成参数,然后将其传递给cmdlet,但是这会失败并且"位置参数不能是发现接受了论证"。

Manaully输入变量内容的命令完成,但使用变量本身甚至不在开关之外

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}

这可能不是最理想的解决方案,但工作正常。

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

1 个答案:

答案 0 :(得分:0)

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

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