【问题标题】:Powershell with Get-MessageTrackingLog (Exchange 2007)带有 Get-MessageTrackingLog 的 Powershell (Exchange 2007)
【发布时间】:2011-01-13 15:16:14
【问题描述】:

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

a) 我想使用 split 命令来隔离所有发件人(使用空格分隔符)并将它们提取到一个数组中, b)然后使用@分隔符将发件人和收件人的地址的第一部分从域中分离出来 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

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

非常感谢任何帮助。我怀疑我的脚本失败了,因为我无法填充收件人数组并将发件人的值与该数组中的每个条目进行比较,但我不知道该怎么做。

【问题讨论】:

    标签: powershell foreach exchange-server-2007


    【解决方案1】:

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

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

    PS C:> $b = "b"

    PS C:> $a -like $b

    b

    PS C:> $b -like $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

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

    【讨论】:

    • 太棒了,它成功了!没想到会这么容易... :) 非常感谢背后的解释!
    猜你喜欢
    • 2018-09-02
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多