Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как вставить в тело сообщения вывод из данного скрипта - (http://forum.oszone.net/showthread.php?t=262662)

LLC 17-06-2013 21:31 2169438

Как вставить в тело сообщения вывод из данного скрипта -
 
Есть скрипт, выводит в окошке части лога:

Код:

$Events = Get-EventLog security -message "*" -before ((get-date -hour 23 -minute 59 -second 59).AddDays(-1)) -after ((get-date -hour 0 -minute 0 -second 0).AddDays(-1)) | ?{$_.eventid -eq 4625}

$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Time ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty Address ($null)

$Events | %{

$Data.time = $_.TimeGenerated

$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}
$Data.UserName = ($message | ?{$_ -like "Имя учетной записи:*"}    | %{$_ -replace "(.+):\s*"})
$Data.Address = ($message | ?{$_ -like "Сетевой адрес источника:*"} | %{$_ -replace "^.+:."})

$data

}


и есть скрипт который отправляет почту:

Код:

$CredUser = "test@test.ru"
$CredPassword = "pass"
$EmailFrom = "test@test.ru"
$EmailTo = "test@test.ru"
$Subject = "Test mail Subject"
$Body = "test mail"
$SMTPServer = "smtp.test.ru"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer)
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($CredUser, $CredPassword);
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

А вот как их сложить в один не понимаю.

Foreigner 17-06-2013 21:55 2169453

Если я правильно понял и надо отправить по почте хэш $data, то можно добавить второй скрипт к первому и вместо $body использовать $data:
Код:

$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, [string] $data.values)
Или передавать почтовому скрипту в качестве параметра:
Код:

mail.ps1 $([string] $data.values)
B mail.ps1:
Код:

$body = $args
Не проверял

LLC 18-06-2013 10:36 2169707

В обоих случаях в теле письма пусто, что еще можно посмотреть?

LLC 18-06-2013 14:49 2169944

Первый скрипт 2.ps1 :

Код:

$Events = Get-EventLog security -message "*" -before ((get-date -hour 23 -minute 59 -second 59).AddDays(-2)) -after ((get-date -hour 0 -minute 0 -second 0).AddDays(-2)) | ?{$_.eventid -eq 4625}
 
$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Time ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty Address ($null)
$Data | Add-Member NoteProperty ComputerName ($null)

$Events | %{

$Data.time = $_.TimeGenerated

$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}
$Data.UserName = ($message | ?{$_ -like "Имя учетной записи:*"}    | %{$_ -replace "(.+):\s*"})
$Data.Address = ($message | ?{$_ -like "Сетевой адрес источника:*"} | %{$_ -replace "^.+:."})
$Data.ComputerName = ($message | ?{$_ -like "Имя рабочей станции:*"} | %{$_ -replace "^.+:."})

}
$body = [string] $Data
$data
$body

.\Send-Email.ps1 -To "test@test.ru" -Subject "Logs" -Body $body

Его вывод в консоле:

Код:

PS C:\Script> .\2.ps1

Time                          UserName                      Address                      ComputerName
----                          --------                      -------                      ------------
16.06.2013 8:08:18            {-, administrator}            1.1.1.1                  SERVER
@{Time=06/16/2013 08:08:18; UserName=System.Object[]; Address=1.1.1.1; ComputerName=SERVER}

Отправка сообщения Send-Email.ps1 :

Код:

param(
[string] $to,
[string] $subject,
[string] $body
)
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>"

        $CredUser = "test@test.ru"
        $CredPassword = "pass"
        $EmailFrom = "test@test.ru"
        $EmailTo = $to
        $SMTPServer = "smtp.test.ru"

$message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo
$message.Subject = $subject
$message.IsBodyHTML = $true
$message.Body = $body | ConvertTo-Html -Head $style

$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Credentials = New-Object System.Net.NetworkCredential($CredUser, $CredPassword);
$smtp.Send($message)

На почту приходит:
*
96
.

Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">=
 <html xmlns=3D"http://www.w3.org/1999/xhtml"> <head> <style>BODY{font-family:=
 Arial; font-size: 10pt;}TABLE{border: 1px solid black; border-collapse:=
 collapse;}TH{border: 1px solid black; background: #dddddd; padding: 5px;=
 }TD{border: 1px solid black; padding: 5px; }</style> </head><body> <table>=
 <colgroup> <col/> </colgroup> <tr><th>*</th></tr> <tr><td>96</td></tr>=
 </table> </body></html>

Не могу понять что и где поправить.

snark 12-07-2013 14:44 2183670

У меня получилось примерно так:

Код:

$Subject = "Microsoft Windows security auditing"
$Theme = "Учетной записи не удалось выполнить вход в систему"
$Server = "mailserver address or IP"
$From = "AuditNotify@firma.ru"
$To = "admin@firma.ru"
$encoding = [System.Text.Encoding]::UTF8

$Body = Get-WinEvent -FilterHashtable @{LogName = "Security";ID = 4625;StartTime = (Get-Date).AddDays(-1)} | Select TimeCreated,`
@{n = "Account";e = {([xml]$_.ToXml()).Event.EventData.Data | ?{$_.Name -eq "SubjectUserName"} | %{$_.'#text'}}}, `
@{n="Workstation name";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "WorkstationName"}| %{$_.'#text'}}},`
@{n="IP Address";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "IPAddress"}| %{$_.'#text'}}}

$body = $body -replace "@{" -replace "}" -replace "=", ": " -replace ";","`n" -replace "TimeCreated","Time Created" -replace "^","`n"
$BodyM = $Body

Send-MailMessage -From $From -To $To -SmtpServer $server -Body "$Theme `n$BodyM" -Subject $Subject -Encoding $encoding

Пример почерпнул с глубин интернета, авторство - itpadla, на основе его скрипта сваял этот.
Проверьте, отпишитесь.

P. S. Запускать скрипт от администратора, так как нужны права на просмотр журнала безопасности.

LLC 29-07-2013 17:45 2192813

Да, Ваш скрипт тоже работает, в моем проблема в создании таблички в теле письма.
У меня была задача по каждому событию отправлять сообщение, но по факту ничего нормального не получилось, событие создается, запускается скрипт, делает выборку последнего события, а там этих событий уже несколько.
Остановлюсь на Вашем скрипте, пусть шлет отчет раз в день.
Хотелось бы все это оформить в табличку, но так и не разобрался.

Molchune 30-07-2013 10:16 2193138

В принципе можно привязать алерт на событие и он уже будет слать письмо. (мб все таки это лучше чем делать скрипт.)
Ну а так вообще не понимаю в чем трабла
читать дальше »
Код:

$CredUser = "test@test.ru"
$CredPassword = "pass"
$EmailFrom = "test@test.ru"
$EmailTo = "destinationmail@tets.ru"
$Subject = "Test mail Subject"
$SMTPServer = "smtpserver"
$Events = Get-EventLog security -message "*" -before ((get-date -hour 23 -minute 59 -second 59).AddDays(-1)) -after ((get-date -hour 0 -minute 0 -second 0).AddDays(-1)) | ?{$_.eventid -eq 4625}
$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Time ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty Address ($null)
$Events | %{
$Data.time = $_.TimeGenerated
$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}
$Data.UserName = ($message | ?{$_ -like "Имя учетной записи:*"}    | %{$_ -replace "(.+):\s*"})
$Data.Address = ($message | ?{$_ -like "Сетевой адрес источника:*"} | %{$_ -replace "^.+:."})
$Body= "Время логина:" + $data.Time + "`nПользователь:"+$data.Username
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer)
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
}


или
читать дальше »
Код:

$Events = Get-EventLog  security -message "*" -before ((get-date -hour 23 -minute 59 -second 59)) -after ((get-date -hour 0 -minute 0 -second 0)) | ?{$_.eventid -eq 4625}
$encoding = [System.Text.Encoding]::UTF8
$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Time ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty Address ($null)
if ($Events -eq $Null) {write-host !!!NULL!!! } else {
  $Events | %{
  $Data.time = $_.TimeGenerated
  $message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}
  $Data.UserName = ($message | ?{$_ -like "Имя учетной записи:*"}    | %{$_ -replace "(.+):\s*"})
  $Data.Address = ($message | ?{$_ -like "Сетевой адрес источника:*"} | %{$_ -replace "^.+:."})
  $Body= "Время логина:" + $data.Time + "`nПользователь:"+$data.Username
  Send-MailMessage -From test@test.ru -to dest@test.ru -SmtpServer ipserver -Body "$Body" -Subject "Log" -Encoding $encoding
  }
}


snark 30-07-2013 10:26 2193145

Цитата:

Цитата Molchune
В принципе можно привязать алерт на событие »

Разумеется, для этого скрипт и делался. Вопрос только, как далеко в прошлое должен смотреть скрипт. В примере
Код:

StartTime = (Get-Date).AddDays(-1)
это просмотр всех событий за последние 24 часа.
Можно настроить хоть на 1 минуту:
Код:

StartTime = (Get-Date).AddSeconds(-60)
Так что, LLC, пробуйте менять значения на нужные вам.

karencho 06-04-2015 08:36 2492209

+ $SMTPClient.Send <<<< ($EmailFrom, $EmailTo, $Subject, $Body) + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException


такая ошибка выводится при посылки сообщения ,вот скрипт который использовал я можете помочь

$EmailFrom = “acc@yandex.ru”

$EmailTo = “acc@gmail.com”

$Subject = “The subject of your email”

$Body = “What do you want your email to say”

$SMTPServer = “smtp.yandex.ru”

$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)

$SMTPClient.EnableSsl = $true

$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“user”, “pass”);

$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)


Время: 02:03.

Время: 02:03.
© OSzone.net 2001-