Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Как вставить в тело сообщения вывод из данного скрипта -

Ответить
Настройки темы
PowerShell - [решено] Как вставить в тело сообщения вывод из данного скрипта -
LLC LLC вне форума

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: LLC
Дата: 18-06-2013
Есть скрипт, выводит в окошке части лога:

Код: Выделить весь код
$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)
А вот как их сложить в один не понимаю.

Отправлено: 21:31, 17-06-2013

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Если я правильно понял и надо отправить по почте хэш $data, то можно добавить второй скрипт к первому и вместо $body использовать $data:
Код: Выделить весь код
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, [string] $data.values)
Или передавать почтовому скрипту в качестве параметра:
Код: Выделить весь код
mail.ps1 $([string] $data.values)
B mail.ps1:
Код: Выделить весь код
$body = $args
Не проверял

Отправлено: 21:55, 17-06-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

LLC LLC вне форума Автор темы

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:36, 18-06-2013 | #3

LLC LLC вне форума Автор темы

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Первый скрипт 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>
Не могу понять что и где поправить.

Отправлено: 14:49, 18-06-2013 | #4


Ветеран


Сообщения: 508
Благодарности: 140

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
$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. Запускать скрипт от администратора, так как нужны права на просмотр журнала безопасности.

Последний раз редактировалось snark, 12-07-2013 в 15:56.


Отправлено: 14:44, 12-07-2013 | #5

LLC LLC вне форума Автор темы

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:45, 29-07-2013 | #6


Старожил


Сообщения: 280
Благодарности: 72

Профиль | Отправить PM | Цитировать


В принципе можно привязать алерт на событие и он уже будет слать письмо. (мб все таки это лучше чем делать скрипт.)
Ну а так вообще не понимаю в чем трабла
читать дальше »
Код: Выделить весь код
$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
   }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:16, 30-07-2013 | #7


Ветеран


Сообщения: 508
Благодарности: 140

Профиль | Отправить PM | Цитировать


Цитата Molchune:
В принципе можно привязать алерт на событие »
Разумеется, для этого скрипт и делался. Вопрос только, как далеко в прошлое должен смотреть скрипт. В примере
Код: Выделить весь код
StartTime = (Get-Date).AddDays(-1)
это просмотр всех событий за последние 24 часа.
Можно настроить хоть на 1 минуту:
Код: Выделить весь код
StartTime = (Get-Date).AddSeconds(-60)
Так что, LLC, пробуйте менять значения на нужные вам.

Отправлено: 10:26, 30-07-2013 | #8


Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


+ $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)

Отправлено: 08:36, 06-04-2015 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Как вставить в тело сообщения вывод из данного скрипта -

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Вывод сообщения после разблокировки компьютера. groovik Microsoft Windows NT/2000/2003 4 20-12-2012 17:28
CMD/BAT - Вывод сообщения о успешном подключении XXXp Скриптовые языки администрирования Windows 3 18-12-2011 22:13
V. 2010 - тело сообщения пустое Pechept Microsoft Exchange Server 1 22-04-2011 19:44
VBS/WSH/JS - [решено] передать параметры запуска в тело скрипта xvoct Скриптовые языки администрирования Windows 1 24-06-2010 16:48
Как сделать чтобы из данного компьютера невозможно было зайти в odnoklassniki.ru и vk Sergyx Хочу все знать 3 16-12-2009 16:08




 
Переход