Лучший отвечающий
Получение MessageTrackingLog в EMS 2010

Вопрос
-
Здравствуйте!
Проблема следующего плана. В основном связана с абсолютным незнанием скриптинга =)
Задача:
Получить логи отправлленных сообщений от пользователей, находящихся в в определённом датасторе и сложить их в .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.ExportCsvCommand18 марта 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 -
Построчно, говорит, что пусто
Не рассмотрел разницы между первым и вторым варантами предложенными Вами...
- Изменено Nestor_tomsk 18 марта 2019 г. 8:46
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