none
Скрипт проверки соединения RRS feed

  • Вопрос

  • Суть такова. Имеется текстовой файл ip.txt вида

    192.168.0.1

    192.168.0.2

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

    Опыта работы в поше нет, есть некоторые идеи. ВО первых можно ли использовать If, else? И как брать результат того есть ли пинг или нет? Foreach? Ну и соответсвенно выводить разным цветом Write-Host -ForegroundColor "red" ?

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

    11 февраля 2013 г. 13:48

Ответы

  • Без промежуточного файла:
    $out = Get-Content servers.txt | Where {!(Test-Connection $_ -Quiet -Count 2)} | Out-String
    
    if($out) {
    	Send-MailMessage -Body $out -To test@mail.com -From test@mail.com -Subject "Bad Servers" -Server mail.cleverlab.net
    }

    С промежуточным фалом:

    $file = "bad.txt"

    Get-Content servers.txt | Where {!(Test-Connection $_ -Quiet -Count 2)} | Out-File $file if((Get-Item $file).Length -gt 0) { Send-MailMessage -Attach $file -To test@mail.com -From test@mail.com -Subject "Bad Servers" -Server mail.cleverlab.net }



    11 февраля 2013 г. 18:41
    Отвечающий

Все ответы

  • Get-Content servers.txt | Foreach { 
    	if (Test-Connection $_ -Quiet -Count 2) {Write-Host -ForeGround green $_}
    	else {Write-Host -ForeGround red $_}
    }
    

    11 февраля 2013 г. 14:10
    Отвечающий
  • Get-Content C:\server.txt | Foreach { 
    if (Test-Connection $_ -Quiet -Count 2) {Write-Host "Work" $_}
    else {Write-Host "Doesn`t work" $_}
    } | Out-File servers.txt

    Если будет так то он выведет рядом work или doesnt`t work затем заменит содержимое этого файла теперь нужно отправить далее по конвейеру

    и приаттачить его при отправе по почте. Умею отправлять лишь только сообщения по смтп (доходят) а как приаттачить серверс.тхт

    $smtp = New-Object Net.Mail.SmtpClient("mail.cleverlab.net")
    $smtp.Send("test@mail.com","test@mail.com","Server monitoring","Server monitoring")

    Почему скрипт не работает? По идее он должен пропинговать

    11 февраля 2013 г. 14:29
  • 1) Убрать Write-Host,т.к. он выводит только на консоль

    2)  Send-MailMessage -Attachments C:\myfile.txt -To test@mail.com -From test@mail.com -Subject "Server monitoring" -Server mail.cleverlab.net


    • Изменено KazunEditor 11 февраля 2013 г. 14:43
    11 февраля 2013 г. 14:42
    Отвечающий
  • Всмысле убрать? как он будет в таком случае выводить в текстовой файл ?  {"Work" $_} так оставить просто?

    и ещё, как выводить уже в другой файл, допустим  badserver.txt те  которые помечены doesn`t work и отправлять его если в нем больше 0 байт ( -gt как я понял)

    11 февраля 2013 г. 14:49
  • 1) Оставить "Work $_" и "Doesn`t work $_"

    2)  "Doesn`t work $_" >> badserver.txt

    3)

    [string[]]$att = "goodserver.txt"
    if (Test-Path badserver.txt)
    {
    	$att+= 	"badserver.txt"
    }
    Send-MailMessage -Attachments $att
    		

    11 февраля 2013 г. 14:59
    Отвечающий
  • Goodserver как таковой мне не нужен, как можно указать, чтобы если файл больше 0 байт он отправлялся по почте, если равно 0 байт соответственно просто остановить конвейер. {$_.Size gt "0"} не работает.
    11 февраля 2013 г. 17:16
  • А зачем вообще создавать промежуточный файл?

    $out = Get-Content servers.txt | Where {!(Test-Connection $_ -Quiet -Count 2)} | Out-String

    Send-MailMessage -Body $out -To test@mail.com -From test@mail.com -Subject "Server monitoring" -Server mail.cleverlab.net

    11 февраля 2013 г. 18:03
    Отвечающий
  • Отсылать нужно в том случае если сервер не отвечает, т.е. doesn`t work.

    Get-Content C:\server.txt | Foreach { 
    if (Test-Connection $_ -Quiet -Count 2) {"Work $_"}
    else {"Doesn`t work $_"}
        "Doesn`t work $_" >> badserver.txt
    } |

    Send-MailMessage -Attachments C:\badserver.txt -To test@mail.com -From test@mail.com -Subject "Server monitoring" -Server mail.cleverlab.net

    В данном случае он просто будет отправлять после выполнения скрипта файл badserverm а нужно чтобы он проверил есть ли в этом txt файле запись (т.е. отсюда и проверка -gt 0 байт) и только лишь в том случае отправлять

    11 февраля 2013 г. 18:29
  • Без промежуточного файла:
    $out = Get-Content servers.txt | Where {!(Test-Connection $_ -Quiet -Count 2)} | Out-String
    
    if($out) {
    	Send-MailMessage -Body $out -To test@mail.com -From test@mail.com -Subject "Bad Servers" -Server mail.cleverlab.net
    }

    С промежуточным фалом:

    $file = "bad.txt"

    Get-Content servers.txt | Where {!(Test-Connection $_ -Quiet -Count 2)} | Out-File $file if((Get-Item $file).Length -gt 0) { Send-MailMessage -Attach $file -To test@mail.com -From test@mail.com -Subject "Bad Servers" -Server mail.cleverlab.net }



    11 февраля 2013 г. 18:41
    Отвечающий