Enterprise IT Solutions/Microsoft

[PowerShell] 비동기 PING 스크립트

iseop 2024. 11. 30. 12:14
$net = "192.168.75"
$ips = 1..254
$timeout = 2000
$online = @()

$ips = $ips | % { "$($net).$_" }
$task = $ips | % {
    [Net.NetworkInformation.Ping]::new().SendPingAsync($_, $timeout)
}
[Threading.Tasks.Task]::WaitAll($task)

$task.Result | where Status -eq 'Success' | % {
    $addr = $_.Address.IPAddressToString
    $online += $addr
    Write-Host $addr -ForegroundColor Green
}

$online

 

$ips = 1..254처럼 쓰면 $ips는 1부터 254까지의 숫자를 원소로 가지는 배열이 됩니다.

@()는 빈 배열을 나타냅니다.

%는 Foreach-Object의 별칭입니다.

[Net.NetworkInformation.Ping]처럼 .NET 라이브러리를 불러다 쓸 수 있습니다.

콜론을 두 개 쓰고, 메소드를 호출하면 됩니다.

Task 클래스를 통해 비동기 작업들을 실행합니다.

마지막으로 Status가 Success인 결과만 모아서 표시하고, 재사용을 위해 배열에 저장합니다.

 

끝.