2011-01-13 79 views
0

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

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

我有这么远:

GET-MessageTrackingLog -server “pdnaex1” -EventID “SEND” - 启动 “01/10/2010 00:00:00” 末端“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

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

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

回答

0

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

PS C:> $一个= “A”, “B”, “C”

PS C:> $ B = “b” 的

PS C:> $ A样$ B

b

PS C:> $ b $样一个

您可以通过铸造$得到ARRY _收件人为[字符串]和将它拆分到@上,但不能轻松地从该数组中选择用户部分。

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

部分测试:

GET-MessageTrackingLog -server “pdnaex1” -EventID “SEND” - 启动 “01/10/2010 00:00:00” 末端“31/10/2010 23:59: 59“ - 结果无限制| {{$ .recipients |%{$ .split(“@”)[0]})like $ _。sender.split(“@”)[0]} |选择时间戳,@ {Name =“Sender”; Expression = {$。sender}},@ {Name =“Recipients”; Expression = {$。recipients}},messagesubject | export-csv X:\ XXX。csv

注意:$后的下划线似乎不会显示在答案中的帖子中。

+0

太棒了,它的工作!没有意识到这将是那么容易...... :)非常感谢它背后的解释! – adomce 2011-01-13 17:01:20

相关问题