none
Получение MessageTrackingLog в EMS 2010 RRS feed

  • Вопрос

  • Здравствуйте!

    Проблема следующего плана. В основном связана с абсолютным незнанием скриптинга =)

    Задача:

    Получить логи отправлленных сообщений от пользователей, находящихся в в определённом датасторе и сложить их в .CSV .

    В ручном режим по одному пользователю - всё норм. А вот с автоматизацией напряг.

    Вот скрипт:

    $Users = Get-Mailbox -Database database_07 | Select-Object {$_.PrimarySMTPAddress}
    ForEach ($User in $Users)
    {
    Get-MessageTrackingLog -Server ServerName -Start (Get-Date).AddDays(-1) -Sender "$($User.$_.PrimarySMTPAddress)" | Where-Object {$_.recipients -notlike "*@mydomain.ru"} | Where-object {$_.EventID -like "SEND"} | Select-object {$_.Timestamp}, {$_.Sender}, {$_.Recipients}, {$_.MessageSubject}, {$_.EventId} | Export-CSV E:\1\getdate1.csv -Encoding UTF8 -Delimiter ";"
    }

    18 марта 2019 г. 7:15

Ответы

  • Добрый день. Попробуйте вот так:

    $Out =@()

    $Users = Get-Mailbox -Database database_07 | Select-Object PrimarySMTPAddress
    ForEach ($User in $Users)
    {
    $Out += (Get-MessageTrackingLog -Server ServerName -Start (Get-Date).AddDays(-1) -Sender $User.PrimarySMTPAddress | Where-object {$_.EventID -like "SEND"} | Select-object Timestamp,Sender,Recipients,MessageSubject,EventId)
    }

    $Out | sort Timestamp | Далее_экспорт_в_csv.

    • Помечено в качестве ответа Nestor_tomsk 18 марта 2019 г. 10:59
    18 марта 2019 г. 10:04
  • Спасибо Огромное) Вы мне очень помогли)

    Вот финальный (малость модифицированный) вариант скрипта:

    $Out =@()
    $Users = Get-Mailbox -Database database_07 | Select-Object PrimarySMTPAddress
    
    ForEach ($User in $Users)
    {
    $Out += (Get-MessageTrackingLog -Resultsize unlimited -Server ServerName -Start (Get-Date).AddDays(-1) -Sender $User.PrimarySMTPAddress | Where-object {$_.EventID -like "SEND"} | Select-object Timestamp,Sender,@{Name="Recipients";Expression={$_.recipients}},MessageSubject,EventId)
    }
    $Out | sort Timestamp | Export-CSV E:\1\getdate.csv -Encoding UTF8 -Delimiter ";" -NoTypeInformation


    • Помечено в качестве ответа Nestor_tomsk 18 марта 2019 г. 11:02
    • Изменено Nestor_tomsk 19 марта 2019 г. 1:59
    18 марта 2019 г. 11:02

Все ответы

  • попробуйте так

    $out =@()
    
    $Users = Get-Mailbox -Database database_07 | Select-Object {$_.PrimarySMTPAddress}
    ForEach ($User in $Users)
    {
    $Out += Get-MessageTrackingLog -Server ServerName -Start (Get-Date).AddDays(-1) -Sender "$($User.$_.PrimarySMTPAddress)" | Where-Object {$_.recipients -notlike "*@mydomain.ru"} | Where-object {$_.EventID -like "SEND"} | Select-object {$_.Timestamp}, {$_.Sender}, {$_.Recipients}, {$_.MessageSubject}, {$_.EventId}
    }
    
     $Out | Export-CSV E:\1\getdate1.csv -Encoding UTF8 -Delimiter ";"

    18 марта 2019 г. 7:52
  • Ошибку выдаёт =(

    Export-CSV : Cannot bind argument to parameter 'InputObject' because it is null.
    At E:\1\MessageTrack2.ps1:9 char:19
    +  $Out | Export-CSV <<<<  E:\1\getdate1.csv -Encoding UTF8 -Delimiter ";"
        + CategoryInfo          : InvalidData: (:) [Export-Csv], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ExportCsvCommand

    18 марта 2019 г. 8:29
  • Если руками вбивать

    $Users = Get-Mailbox -Database database_07 | Select-Object {$_.PrimarySMTPAddress}


    а потом написать

    Write-Host $users

    Занчения получаются в таком виде

    @{$_.PrimarySMTPAddress=root@mydomain.ru} @{$_.PrimarySMTPAddress=user@mydomain.ru}

    Разделённый пробелом

    Я вот думаю, нужно ли как-то отобразить это в скрипте?

    18 марта 2019 г. 8:32
  • в массиве $Out есть что?

    и попробуйте так

    $Out =@()
    
    $Users = Get-Mailbox -Database database_07 | Select-Object {$_.PrimarySMTPAddress}
    ForEach ($User in $Users)
    {
    $Out += (Get-MessageTrackingLog -Server ServerName -Start (Get-Date).AddDays(-1) -Sender "$($User.$_.PrimarySMTPAddress)" | Where-Object {$_.recipients -notlike "*@mydomain.ru"} | Where-object {$_.EventID -like "SEND"} | Select-object {$_.Timestamp}, {$_.Sender}, {$_.Recipients}, {$_.MessageSubject}, {$_.EventId})
    }
    
     $Out | Export-CSV E:\1\getdate1.csv -Encoding UTF8 -Delimiter ";"

    18 марта 2019 г. 8:33
  • Построчно, говорит, что пусто

    Не рассмотрел разницы между первым и вторым варантами предложенными Вами...

    18 марта 2019 г. 8:44
  • Добрый день. Попробуйте вот так:

    $Out =@()

    $Users = Get-Mailbox -Database database_07 | Select-Object PrimarySMTPAddress
    ForEach ($User in $Users)
    {
    $Out += (Get-MessageTrackingLog -Server ServerName -Start (Get-Date).AddDays(-1) -Sender $User.PrimarySMTPAddress | Where-object {$_.EventID -like "SEND"} | Select-object Timestamp,Sender,Recipients,MessageSubject,EventId)
    }

    $Out | sort Timestamp | Далее_экспорт_в_csv.

    • Помечено в качестве ответа Nestor_tomsk 18 марта 2019 г. 10:59
    18 марта 2019 г. 10:04
  • Получилось)

    За исключением того, что REcipients  выдаёт значение "System.String[]"

    У меня такое было во время одночных опытов. Как раз когда вместо $_.PrimarySMTPAddress пишем просто PrimarySMTPAddress

    18 марта 2019 г. 10:23
  • Спасибо Огромное) Вы мне очень помогли)

    Вот финальный (малость модифицированный) вариант скрипта:

    $Out =@()
    $Users = Get-Mailbox -Database database_07 | Select-Object PrimarySMTPAddress
    
    ForEach ($User in $Users)
    {
    $Out += (Get-MessageTrackingLog -Resultsize unlimited -Server ServerName -Start (Get-Date).AddDays(-1) -Sender $User.PrimarySMTPAddress | Where-object {$_.EventID -like "SEND"} | Select-object Timestamp,Sender,@{Name="Recipients";Expression={$_.recipients}},MessageSubject,EventId)
    }
    $Out | sort Timestamp | Export-CSV E:\1\getdate.csv -Encoding UTF8 -Delimiter ";" -NoTypeInformation


    • Помечено в качестве ответа Nestor_tomsk 18 марта 2019 г. 11:02
    • Изменено Nestor_tomsk 19 марта 2019 г. 1:59
    18 марта 2019 г. 11:02