Компьютерный форум 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=278468)

Bloodicus 27-02-2014 17:08 2316845

Пинговалка с оповещением на мыло.
 
Поскольку я не разбираюсь в ПШ, но есть большое желание в этом, прошу помощи.

Есть код:

читать дальше »

$erroractionpreference = "SilentlyContinue"
$a = New-Object -comobject Excel.Application
$a.visible = $True
$b = $a.Workbooks.Add()
$c = $b.Worksheets.Item(1)
$c.Cells.Item(1,1) = "Адрес ПК"
$c.Cells.Item(1,2) = "Статус"
$c.Cells.Item(1,3) = "Имя ПК"

$d = $c.UsedRange
$d.Interior.ColorIndex = 19
$d.Font.ColorIndex = 11
$d.Font.Bold = $True
$d.EntireColumn.AutoFit($True)

$intRow = 2

$colComputers = get-content C:\servers.txt
foreach ($strComputer in $colComputers){
$hostname = [System.Net.Dns]::GetHostbyAddress($strcomputer).hostname
$c.Cells.Item($intRow, 1) = $strComputer.ToUpper()
$ping = new-object System.Net.NetworkInformation.Ping
$Reply = $ping.send($strComputer)
if ($Reply.status –eq "Success") {
$c.Cells.Item($intRow, 2) = "Работает"
} else {
$c.Cells.Item($intRow, 2) = "Не работает"
}
$Reply = ""
$c.Cells.Item($intRow, 3) = "$hostname"
$intRow = $intRow + 1
}
$d.EntireColumn.AutoFit()


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

P.S. как заставить сохранять екселевский файл по определенному пути, что бы не возникало проблем, если скрипт будет запускаться с периодичностью в 30 минут, то за 2 часа он создает и открывает 4 файла, можно ли сделать что бы он правил один файл, с последовательной записью.

Bloodicus 28-02-2014 13:13 2317213

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

register01 09-03-2014 13:22 2321124

Могу предложить следующий скриптик, только запись идет в текстовый файл, что намного удобней, к тому же скрипт с exel будет громоздким и написать и править его гораздо сложнее. Ну а пользоваться этим или нет смотрите сами.
-----------------------------------------------
#берем текущую дату
$date=Get-Date -f "dd.MM.yyyy в H:mm"
#задаем переменную для имени файла в который будут записываться результаты за текущий день
$name_file=Get-Date -f "dd.MM.yyyy"
#список адресов для пинга
$adreses="yandex.ru",
"rambler.ru",
"111ttt.ru",
"222ttt.ru"
#Если список адресов из файла раскомментировать
#$adreses=Get-Content "C:\Temp\список адресов.txt"

foreach ($adr in $adreses) {

if (!(Test-Connection -Count 2 -Quiet $adr)) {

"адрес $adr недоступен $date" >> "c:\Temp\$name_file.txt"

}

}

kostia_a 12-03-2014 13:41 2322555

а отправить e-mail можно приблизительно следующим кодом
Код:

$smtpServer = "smtp server"
$smtpFrom = "from address"
$smtpTo = "to address"
$messageSubject = "Subject"
$body = Get-mailboxDatabaseCopyStatus|out-string

send-mailmessage -from "$fromaddress" -to "$toAddress" -subject "$messageSubject" -body "$body" -smtpServer "$smtpserver


Bloodicus 20-03-2014 08:56 2326087

$erroractionpreference = "SilentlyContinue"
$a = New-Object -comobject Excel.Application
$a.visible = $True
$b = $a.Workbooks.Add()
$c = $b.Worksheets.Item(1)
$c.Cells.Item(1,1) = "Адрес ПК"
$c.Cells.Item(1,2) = "Статус"
$c.Cells.Item(1,3) = "Имя ПК"

$d = $c.UsedRange
$d.Interior.ColorIndex = 19
$d.Font.ColorIndex = 11
$d.Font.Bold = $True
$d.EntireColumn.AutoFit($True)

$intRow = 2

$colComputers = get-content C:\servers.txt
foreach ($strComputer in $colComputers){
$hostname = [System.Net.Dns]::GetHostbyAddress($strcomputer).hostname
$c.Cells.Item($intRow, 1) = $strComputer.ToUpper()
$ping = new-object System.Net.NetworkInformation.Ping
$Reply = $ping.send($strComputer)
if ($Reply.status –eq "Success") {
$c.Cells.Item($intRow, 2) = "Работает"

} else {

$c.Cells.Item($intRow, 2) = "Не работает"
$EmailFrom = 'mail.ru'
$EmailTo = '*@sms.ru
$Subject = "Не работает хост $hostname"
$Body = "IP: $strcomputer"
$SMTPServer = 'smtp.mail.ru'
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
$SMTPClient.Credentials = New-Object Net.NetworkCredential("*@mail.ru", "*****");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
}
$c.Cells.Item($intRow, 2) = "Не работает"
}
$Reply = ""
$c.Cells.Item($intRow, 3) = "$hostname"
$intRow = $intRow + 1

$d.EntireColumn.AutoFit()


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

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

Опиум 20-03-2014 09:40 2326096

[почти offtop]
Много делал поделок такого рода, начиная от оповещений еще на пейджер, звонков на стационарный, смс на сотовsй и емейл. Но вобщем, лучше всех работает система, когда потерявшие интернет юзеры очень оперативно звонят на мобилу.

Bloodicus 21-03-2014 12:41 2326611

Просто бывает когда юзеров нет в помещении.


Время: 10:40.

Время: 10:40.
© OSzone.net 2001-