Powershell – Отправка отчетов.

powershell logo- Вы не любите powershell? Да вы просто не умеете его готовить!

Речь сегодня пойдет о методиках отправки файлов отчетов средствами powershell.
Имея в руках такой инструмент как powershell мы можем отправлять что угодно двумя вариантами.

  1. анонимная отсылка сообщений
  2. авторизованная отправка

Традиционные примеры в виде двух скриптов, код которых по мере возможности прокомментирован.

Скрипт №1
Анонимная отправка сообщения.

# Примем по умолчанию папку в которой будем хранить отчеты C:\TEMP\reports\
# Если ее содержимое вам не нужно то раскомментируйте следующую строку
# 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)

Стоит сказать что в случае если вам необходим набор отчетов то вы просто добавляете

$File3 = New-Item -type file «C:\TEMP\reports\$date-какойнибудь_report.txt» -Force

Не забываете его сформировать а затем прописать тут

foreach ($File in ($File1, $File2, $File3)){

Скрипт №2
В случае если необходима авторизованная отправка синтаксис немного меняется, но суть остается прежней.

  1. отчет можно выдергивать из заранее сформированного файла
  2. в переменную $mail.Body можно направлять вывод любой команды.
# Считаем что нам необходим файл file01.txt
$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"
}

Вы можете отслеживать комментарии к этой записи с помощью RSS 2.0. Вы можете оставить комментарий, или использовать trackback с вашего сайта.

Добавить комментарий

Для отправки комментария вы должны авторизоваться.