0

我想知道你是否可以帮助我。我正在尝试使用 Exchange 中的 get-messagetrackinglog 工具提取已向自己发送电子邮件(从域 1 到域 2)的收件人列表。我的小脚本似乎适用于发件人的部分,但是经过几天的思考,我无法使其适用于收件人。我怀疑这是因为每封电子邮件可以有许多收件人(而不是只有一个发件人),这需要将一个数组分配给收件人变量但是对于 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 无限 | 其中 {[string]$ .sender.split("@")[0] -like [string]$ .recipients.split("@")[0]} | 选择时间戳,@{Name="Sender";Expression={$ .sender}},@{Name="Recipients";Expression={$ .recipients}},messagesubject | 导出-csv X:\XXX.csv

我知道上面是不正确的,但希望我能把我的问题说清楚。

任何帮助是极大的赞赏。我怀疑我的脚本失败了,因为我无法填充收件人数组并将发件人的值与该数组中的每个条目进行比较,但我无法弄清楚如何做到这一点。

4

1 回答 1

0

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

PS C:> $a = "a","b","c"

PS C:> $b = "b"

PS C:> $a -like $b

b

PS C:> $b 类似 $a

错误的

您可以通过将 $_.recipients 转换为 [string] 并将其拆分为 @ 来获得一个数组,但您不能轻松地从该数组中选择用户部分。

此外,您需要将发件人和收件人引用为 $ .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 无限 | 其中 {($ .recipients |% {$ .split("@")[0]}) - 像 $_.sender.split("@")[0]} | 选择时间戳,@{Name="Sender";Expression={$.sender}},@{Name="Recipients";Expression={$.recipients}},messagesubject | 导出-csv X:\XXX.csv

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

于 2011-01-13T16:04:26.463 回答