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인 결과만 모아서 표시하고, 재사용을 위해 배열에 저장합니다.
끝.