Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Skrypt .bat do pingowania - Skrypt .bat do pingowania kilku adresów

24 Maj 2019 15:13 282 2
  • Poziom 2  
    Witam,
    Muszę napisać skrypt bat do pingowania kilku adresów IP z wewnętrznej sieci. Chciałbym aby skrypt działał na serwerze i raz uruchomiony pingował wszystkie adresy i zapisywał logi do pliku *txt. Jeżeli jest taka możliwość czy przy niemożliwości pingu danego adresu jest opcja wysłać od razu maila z informacją o tym którym adres się nie pinguje?
  • Poziom 3  
    Żeby dopisać coś do pliku w batchu wystarczy użyć znaku większości, np:
    Code:
    ping 127.0.0.1 >> wynik.txt

    Możesz też użyć pętli żeby dopisać 0 w przypadku niepowodzenia i 1 w przypadku powodzenia (0% strat) pingowania:
    Code:
    for /f %%i in ('ping 127.0.0.1 ^| find /c "(0%% loss)"') do SET MATCHES=%%i
    
    echo %MATCHES% >> test.txt


    Batch nie może wysyłać maili. Jedyne co może zrobić to uruchomić jakiś klient mailowy (np. blat) z odpowiednimi parametrami żeby to on wysłał tego maila. Do tego zadania lepszy będzie powershell. Jest on również dołączony do windowsa a daje większe możliwości, posiada on chociażby wbudowany klient smtp, który pozwala wysyłać maile.
  • Poziom 2  
    Napisałem coś takiego może się komuś przyda:
    Code:

    Get-Content .\Desktop\ipmaszyny.txt | ForEach {

        $details = Test-Connection -ComputerName $_ -Count 1 -ErrorAction SilentlyContinue

        if ($details) {

            $props = @{
                ComputerName = $_
                IP = $details.IPV4Address.IPAddressToString
               
            }

            New-Object PsObject -Property $props
        }

        Else {   
            $props = @{
                ComputerName = $_
                IP = '      Unreachable'
            }

           New-Object PsObject -Property $props
        }

    } | Sort IP | Export-Csv .\Desktop\logs-$(Get-Date -f yyyy-MM-dd-HH-mm).csv -NoTypeInformation



    Chciałbym jeszcze teraz zrobić coś takiego, że w osobnym pliku wyrzuca mi wszystkie nieosiągalne hosty. Po dopisaniu:

    Code:


        Else {   
            $props = @{
                ComputerName = $_
                IP = '      Unreachable'
            }

          $errors += New-Object PsObject -Property $props
        }

    } | Sort IP | Export-Csv .\Desktop\logs-$(Get-Date -f yyyy-MM-dd-HH-mm).csv -NoTypeInformation

    $errors | Export-Csv .\Desktop\errors-logs-$(Get-Date -f yyyy-MM-dd-HH-mm).csv -NoTypeInformation



    Tworzy plik ale tylko z jednym hostem nieosiągalnym. A PowerShell ISE wyrzuca:

    Cytat:
    Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.
    At C:\Users\xxx\Desktop\maszyny.ps1:22 char:9
    + $errors += New-Object PsObject -Property $props
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound