Отправка отчетов с помощью powershell
- Вы не любите powershell? Да вы просто не умеете его готовить!
Речь сегодня пойдет о методиках отправки отчетов средствами powershell т.к. отчеты можно и нужно отправлять, реализуется это довольно просто.
Возможно два варианта.
- анонимная отсылка сообщений
- авторизованная отправка
Традиционные примеры в виде двух скриптов, код которых по мере возможности прокомментирован.
Скрипт №1
Анонимная отправка сообщения.
# Если ее содержимое вам не нужно то раскомментируйте следующую строку
# Remove-Item C:\TEMP\reports\*.txt -force
# устанавливаем формат даты
$date = ( get-date ).ToString(‘yyyyMMdd’)
# Создаем файлы отчетов
$File1 = New-Item -type file "C:\TEMP\reports\$date-mailbox_storage.txt" -Force
$File2 = New-Item -type file "C:\TEMP\reports\$date-mailbox_report.txt" -Force
# от кого
$FromAddress = "exchange.admin@domain.com"
# кому
$ToAddress = "admin@domain.com"
$MessageSubject = "Exchange Server Daily Report"
$MessageBody = "Attached is the current list of mailbox and DataBases sizes."
# сервер через который будет производиться отправка
$SendingServer = "EXCAS"
# формируем первый отчет
Get-MailboxServer -Identity "EXMBX" | Get-MailboxDatabase | Select Identity, @{Name="Size (GB)";Expression={$objitem = (Get-MailboxDatabase $_.Identity); $path = "`\`\" + $objitem.server + "`\" + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + "$"+ $objItem.EdbFilePath.PathName.Remove(0,2); $size = ((Get-ChildItem $path).length)/1048576KB; [math]::round($size, 2)}}, @{Name="No. Of Mbx";expression={(Get-Mailbox -Database $_.Identity | Measure-Object).Count}} | Sort -Property Identity | Format-table -AutoSize | Out-File $File1
# формируем второй отчет
Get-MailboxServer -Identity "EXMBX" | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName,StorageLimitStatus,@{label="TotalItemSize(MB)";expression={$_.TotalItemSize.Value.ToMB()}},ItemCount | Out-File $File2
# Создаем почтовое сообщение
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
# приделываем к нему несколько аттачей
foreach ($File in ($File1, $File2)){
$Attachment = New-Object System.Net.Mail.Attachment $File
$SMTPMessage.Attachments.Add($Attachment)
}
# В случае если отчет всего один то конструкция будет такой
#$Attachment = New-Object System.Net.Mail.Attachment $File1
#$SMTPMessage.Attachments.Add($Attachment)
# Отсылаем сообщение
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)
Стоит сказать что в случае если вам необходим набор отчетов то вы просто добавляете
Не забываете его сформировать а затем прописать тут
Скрипт №2
В случае если необходима авторизованная отправка синтаксис немного меняется, но суть остается прежней.
- отчет можно выдергивать из заранее сформированного файла
- в переменную $mail.Body можно направлять вывод любой команды.
$file = "C:\TEMP\reports\file01.txt"
$FileExists = Test-Path $file
# проверяем наличие файла
If ($FileExists -eq "False") {
Write-Host "sending mail"
# Создаем почтовое сообщение
$mail = New-Object System.Net.Mail.MailMessage
# Устанавливаем
$mail.From = New-Object System.Net.Mail.MailAddress("exchange.admin@domain.com")
$mail.To.Add("admin@domain.com")
# Устанавливаем тему сообщения
$mail.Subject = "report";
# Создаем тело сообщения из файла
$mail.Body = get-content $file
# Создаем почтовое сообщение
$smtp = New-Object System.Net.Mail.SmtpClient
# Указываем хост через который будем отправлять
$smtp.host = "EXCAS"
# Задаем пользователя от имени которого будет происходить отправка
$Credentials = new-object System.Net.networkCredential
$Credentials.domain = "DOMAIN"
$Credentials.UserName = "user.name"
$Credentials.Password = "P@$$W0rd"
$smtp.Credentials = $Credentials
# Производим отправку
$smtp.Send($mail)
# В случае необходимости удаляем файл
Remove-Item $file
} else {
Write-Host "File $file not found"
}
