带有Get-MessageTrackingLog的Powershell(Exchange 2007)

时间:2011-01-13 15:16:14

标签: powershell foreach exchange-server-2007

我想知道你是否可以帮助我。我正在尝试使用Exchange中的get-messagetrackinglog工具提取已向自己(从domain1到domain2)发送电子邮件的收件人列表。我的小脚本似乎与发件人的一部分工作正常,但经过几天的思考后,我无法让它与收件人一起工作。我怀疑这是因为每个电子邮件可能有许多收件人(而不是只有一个发件人),这需要将一个数组分配给收件人变量,但对PowerShell是新的,我不完全确定如何做到这一点以及如何管道通过。逻辑如下:

a)我想使用split命令隔离所有发件人(使用空格分隔符)并将它们提取到数组中, b)然后使用@ delimiter和来从域中分离发件人和收件人的地址的第一部分 c)比较我收到的第一部分电子邮件地址(从adam @ domain1和adam @ domain2返回的值)。 d)如果匹配 - 我需要将电子邮件结果导出到.csv。

我到目前为止:

Get-MessageTrackingLog -server“pdnaex1”-EventID“SEND”-start“01/10/2010 00:00:00”-end“31/10/2010 23:59:59”-resultsize Unlimited |其中{[string] $ .sender.split(“@”)[0] -like [string] $ .recipients.split(“@”)[0]} |选择时间戳,@ {Name =“Sender”; Expression = {$ .sender}},@ {Name =“Recipients”; Expression = {$ .recipients}},messagesubject | export-csv X:\ XXX.csv

我知道上面的内容不正确,但希望我明白我的问题。

非常感谢任何帮助。我怀疑我的脚本失败了,因为我无法填充收件人数组并将发件人的值与该数组中的每个条目进行比较,但我无法确定如何执行此操作。

1 个答案:

答案 0 :(得分:0)

您可以使用-like将数组与标量进行比较,但不能使用它来比较标量和数组。数组参数必须先来。

PS C:> $ a =“a”,“b”,“c”

PS C:> $ b =“b”

PS C:> $ a -like $ b

B'/ P>

PS C:> $ b -like $ a

你可以通过将$ _。收件人转换为[string]并将其拆分为@来获得arry,但是你不能轻易地从该数组中选择用户部分。

此外,您需要将发件人和收件人称为$ .sender和$ .recipients,而不是$ sender和$ recipients。

部分测试:

Get-MessageTrackingLog -server“pdnaex1”-EventID“SEND”-start“01/10/2010 00:00:00”-end“31/10/2010 23:59:59”-resultsize Unlimited |其中{($ .recipients |%{$ .split(“@”)[0]})-like $ _。sender.split(“@”)[0]} |选择时间戳,@ {Name =“Sender”; Expression = {$。sender}},@ {Name =“Recipients”; Expression = {$。recipients}},messagesubject | export-csv X:\ XXX.csv

注意:$后面的下划线似乎没有出现在答案的帖子中。