PowerShell ile aynı anda çok sayıda IP'ye ping atmak (tr-TR)

%3CLINGO-SUB%20id%3D%22lingo-sub-1375410%22%20slang%3D%22en-US%22%3EPowerShell%20ile%20ayn%C4%B1%20anda%20%C3%A7ok%20say%C4%B1da%20IP'ye%20ping%20atmak%20(tr-TR)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1375410%22%20slang%3D%22en-US%22%3E%3CP%3EToplu%20sunucu%20g%C3%BCncellemeleri%20yada%20bak%C4%B1mlar%C4%B1nda%20suncunun%20up%20m%C4%B1%20down%20mu%20kontrol%20etmek%20i%C3%A7in%20hemen%20hemen%20herkesin%20ilk%20yapt%C4%B1%C4%9F%C4%B1%20i%C5%9Flemlerden%20olan%20%22ping%22%20atma%20s%C3%BCreci%20i%C3%A7in%20g%C3%BCn%20geliyor%20ayn%C4%B1%20anda%20birden%20fazla%20ipye%20ping%20atmam%C4%B1z%20gerekiyor%20bunun%20i%C3%A7in%20bir%20%C3%A7ok%20komut%20sat%C4%B1r%C4%B1%20a%C3%A7mak%20yerine%20basit%20bir%20script%20ile%20olu%C5%9Fturdu%C4%9Funuz%20ip%20listesini%20kullanarak%20toplu%20bir%20%C5%9Fekilde%20iplere%20ping%20atabilirsiniz.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-powershell%22%3E%3CCODE%3E%5BCmdletBinding()%5D%0AParam%0A(%0A%20%20%20%20%5BParameter(Mandatory%3D%24true%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ValueFromPipeline%3D%24true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ValueFromPipelineByPropertyName%3D%24true%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Position%3D0)%5D%0A%20%20%20%20%5BValidateNotNullOrEmpty()%5D%0A%20%20%20%20%5Bstring%5B%5D%5D%24ComputerName%2C%0A%0A%0A%20%20%20%20%5BParameter(Position%3D1)%5D%0A%20%20%20%20%5Bint%5D%24ResultCount%20%3D%20150%0A)%0A%0A%20%20%20%20%24PipelineItems%20%3D%20%40(%24input)%0A%20%20%20%20if%20(%24PipelineItems.Count)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24ComputerName%20%3D%20%24PipelineItems%0A%20%20%20%20%7D%0A%0A%24ComputerName%20%7C%20%0A%20%20%20%20Where-Object%20%20%20%7B%20-not%20(%24_%20-as%20%5Bipaddress%5D)%20%7D%20%7C%0A%20%20%20%20ForEach-Object%20%7B%0A%20%20%20%20%20%20%20%20%24null%20%3D%20Resolve-DnsName%20%24_%20-ErrorAction%20Stop%0A%20%20%20%20%7D%0A%0A%24UseClearHostWhenRedrawing%20%3D%20%24false%0Atry%20%7B%0A%20%20%20%20%5BSystem.Console%5D%3A%3ASetCursorPosition(0%2C%200)%0A%7D%20catch%20%5BSystem.IO.IOException%5D%20%7B%0A%20%20%20%20%24UseClearHostWhenRedrawing%20%3D%20%24true%0A%7D%0A%0AClear-Host%0A%0A%5Barray%5D%24PingData%20%3D%20foreach(%24Computer%20in%20%24ComputerName)%0A%7B%0A%20%20%20%20%40%7B%0A%20%20%20%20%20%20%20%20'Name'%20%20%20%20%20%20%20%3D%20%24Computer%0A%20%20%20%20%20%20%20%20'Pinger'%20%20%20%20%20%3D%20New-Object%20-TypeName%20System.Net.NetworkInformation.Ping%0A%20%20%20%20%20%20%20%20'Results'%20%20%20%20%3D%20New-Object%20-TypeName%20System.Collections.Queue(%24ResultCount)%0A%20%20%20%20%20%20%20%20'LastResult'%20%3D%20%40%7B%7D%0A%20%20%20%20%7D%0A%7D%0Aforeach%20(%24Item%20in%20%24PingData)%0A%7B%0A%20%20%20%20for%20(%24Filler%20%3D%200%3B%20%24Filler%20-lt%20%24ResultCount%3B%20%24Filler%2B%2B)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24Item.Results.Enqueue('_')%0A%20%20%20%20%7D%0A%7D%0A%0Awhile%20(%24true)%0A%7B%0A%0A%20%20%20%20%20%20%20%20%5Barray%5D%24PingTasks%20%3D%20foreach(%24Item%20in%20%24PingData)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24Item.Pinger.SendPingAsync(%24Item.Name)%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%5BThreading.Tasks.Task%5D%3A%3AWaitAll(%24PingTasks)%0A%20%20%20%20%20%20%20%20%7D%20catch%20%5BAggregateException%5D%20%7B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%200..(%24PingTasks.Count-1)%20%7C%20ForEach-Object%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%24Task%20%20%20%20%20%20%20%20%20%3D%20%24PingTasks%5B%24_%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%24ComputerData%20%3D%20%24PingData%5B%24_%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(%24Task.Status%20-ne%20'RanToCompletion')%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24ComputerData.Results.Enqueue('%3F')%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24ComputerData.LastResult%20%3D%20%24Task.Result%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20switch%20(%24Task.Result.Status)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Success'%20%20%7B%20%24ComputerData.Results.Enqueue('.')%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'TimedOut'%20%7B%20%24ComputerData.Results.Enqueue('x')%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20foreach%20(%24Item%20in%20%24PingData)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20(%24Item.Results.Count%20-gt%20%24ResultCount)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24null%20%3D%20%24Item.Results.DeQueue()%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%0A%20%20%20%20%20%20%20%20if%20(%24UseClearHostWhenRedrawing)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Clear-Host%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24CursorPosition%20%3D%20%24Host.UI.RawUI.CursorPosition%0A%20%20%20%20%20%20%20%20%20%20%20%20%24CursorPosition.X%20%3D%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%24CursorPosition.Y%20%3D%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%24Host.UI.RawUI.CursorPosition%20%3D%20%24CursorPosition%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20foreach%20(%24Item%20in%20%24PingData)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20((%24Item.Results%20-join%20'')%20%2B%20'%20%7C%20')%20-NoNewline%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%24PingText%20%3D%20if%20(%24Item.LastResult.Status%20-eq%20'Success')%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(1000%20-le%20%24Item.LastResult.RoundTripTime)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'(999%2Bms)'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'(%7B0%7Dms)'%20-f%20%24Item.LastResult.RoundTripTime.ToString().PadLeft(4%2C%20'%20')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'(----ms)'%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%22%24PingText%20%7C%20%22%20-NoNewline%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(%24Item.LastResult.Status%20-eq%20'Success')%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20(%24Item.Name)%20-BackgroundColor%20DarkGreen%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20(%24Item.Name)%20-BackgroundColor%20DarkRed%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%24Delay%20%3D%201000%20-%20(%24PingData.lastresult.roundtriptime%20%7C%20Sort-Object%20%7C%20Select-Object%20-Last%201)%0A%20%20%20%20%20%20%20%20Start-Sleep%20-MilliSeconds%20%24Delay%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EScriptinizi%20PS1%20dosyas%C4%B1%20olarak%20olu%C5%9Fturun%20ve%20PowerShell%20komut%20sat%C4%B1r%C4%B1ndan%20Get-Content%20ile%20ip%20listenizi%20ve%20PS1%20dosyan%C4%B1z%C4%B1%20%C3%A7al%C4%B1%C5%9Ft%C4%B1r%C4%B1n%C4%B1z.%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-powershell%22%3E%3CCODE%3EGet-Content%20.%5Ciplist.txt%20%7C%20.%5Cping.ps1%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3BUygulama%20%C3%A7%C4%B1kt%C4%B1s%C4%B1%20a%C5%9Fa%C4%9F%C4%B1daki%20gibidir.%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-powershell%22%3E%3CCODE%3E__________________________________________________________............................................................................................%20%7C%20(%20%20%200ms)%20%7C%20192.18.101.130%0A______________________________________________________________________________________________________________________________________________________%20%7C%20(----ms)%20%7C%20192.18.101.126%0A__________________________________________________________............................................................................................%20%7C%20(%20%20%200ms)%20%7C%20192.18.101.135%0APS%20C%3A%5CUsers%5CAdministrator%5Cdesktop%26gt%3B%20%0APS%20C%3A%5CUsers%5CAdministrator%5Cdesktop%26gt%3B%20Get-Content%20.%5Ciplist.txt%20%7C%20.%5Cping.ps1%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1375410%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EWindows%20PowerShell%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Contributor

Toplu sunucu güncellemeleri yada bakımlarında suncunun up mı down mu kontrol etmek için hemen hemen herkesin ilk yaptığı işlemlerden olan "ping" atma süreci için gün geliyor aynı anda birden fazla ipye ping atmamız gerekiyor bunun için bir çok komut satırı açmak yerine basit bir script ile oluşturduğunuz ip listesini kullanarak toplu bir şekilde iplere ping atabilirsiniz.

 

 

[CmdletBinding()]
Param
(
    [Parameter(Mandatory=$true, 
                ValueFromPipeline=$true,
                ValueFromPipelineByPropertyName=$true, 
                Position=0)]
    [ValidateNotNullOrEmpty()]
    [string[]]$ComputerName,


    [Parameter(Position=1)]
    [int]$ResultCount = 150
)

    $PipelineItems = @($input)
    if ($PipelineItems.Count)
    {
        $ComputerName = $PipelineItems
    }

$ComputerName | 
    Where-Object   { -not ($_ -as [ipaddress]) } |
    ForEach-Object {
        $null = Resolve-DnsName $_ -ErrorAction Stop
    }

$UseClearHostWhenRedrawing = $false
try {
    [System.Console]::SetCursorPosition(0, 0)
} catch [System.IO.IOException] {
    $UseClearHostWhenRedrawing = $true
}

Clear-Host

[array]$PingData = foreach($Computer in $ComputerName)
{
    @{
        'Name'       = $Computer
        'Pinger'     = New-Object -TypeName System.Net.NetworkInformation.Ping
        'Results'    = New-Object -TypeName System.Collections.Queue($ResultCount)
        'LastResult' = @{}
    }
}
foreach ($Item in $PingData)
{
    for ($Filler = 0; $Filler -lt $ResultCount; $Filler++)
    {
        $Item.Results.Enqueue('_')
    }
}

while ($true)
{

        [array]$PingTasks = foreach($Item in $PingData)
        {
            $Item.Pinger.SendPingAsync($Item.Name)

        }

        try {
            [Threading.Tasks.Task]::WaitAll($PingTasks)
        } catch [AggregateException] {
        }

        0..($PingTasks.Count-1) | ForEach-Object {
                
            $Task         = $PingTasks[$_]
            $ComputerData = $PingData[$_]

            if ($Task.Status -ne 'RanToCompletion')
            {
                $ComputerData.Results.Enqueue('?')
            }
            else
            {
                $ComputerData.LastResult = $Task.Result
                    
                switch ($Task.Result.Status)
                {
                    'Success'  { $ComputerData.Results.Enqueue('.') }
                    'TimedOut' { $ComputerData.Results.Enqueue('x') }
                }
                    
            }  
        }

        foreach ($Item in $PingData)
        {
            while ($Item.Results.Count -gt $ResultCount)
            {
                $null = $Item.Results.DeQueue()
            }
        }


        if ($UseClearHostWhenRedrawing)
        {
            Clear-Host
        }
        else
        {
            $CursorPosition = $Host.UI.RawUI.CursorPosition
            $CursorPosition.X = 0
            $CursorPosition.Y = 0
            $Host.UI.RawUI.CursorPosition = $CursorPosition
        }

        foreach ($Item in $PingData)
        {
            Write-Host (($Item.Results -join '') + ' | ') -NoNewline

            $PingText = if ($Item.LastResult.Status -eq 'Success')
            {
                if (1000 -le $Item.LastResult.RoundTripTime)
                {
                     '(999+ms)'
                }
                else
                {
                    '({0}ms)' -f $Item.LastResult.RoundTripTime.ToString().PadLeft(4, ' ')
                }
            }
            else
            {
                '(----ms)'
            }
            Write-Host "$PingText | " -NoNewline
            if ($Item.LastResult.Status -eq 'Success')
            {
                Write-Host ($Item.Name) -BackgroundColor DarkGreen
            }
            else
            {
                Write-Host ($Item.Name) -BackgroundColor DarkRed
            }
        }
        $Delay = 1000 - ($PingData.lastresult.roundtriptime | Sort-Object | Select-Object -Last 1)
        Start-Sleep -MilliSeconds $Delay
}

 

Scriptinizi PS1 dosyası olarak oluşturun ve PowerShell komut satırından Get-Content ile ip listenizi ve PS1 dosyanızı çalıştırınız.

Get-Content .\iplist.txt | .\ping.ps1

 

 Uygulama çıktısı aşağıdaki gibidir.

__________________________________________________________............................................................................................ | (   0ms) | 192.18.101.130
______________________________________________________________________________________________________________________________________________________ | (----ms) | 192.18.101.126
__________________________________________________________............................................................................................ | (   0ms) | 192.18.101.135
PS C:\Users\Administrator\desktop> 
PS C:\Users\Administrator\desktop> Get-Content .\iplist.txt | .\ping.ps1

 

0 Replies