目の前にデバイスがあるのにIPアドレスがわからない。
いろいろ設定しなおしたり、モニターを繋げたりすれば確認はできるけど、めんどう過ぎる。
お客さんの目の前であたふたしたくない。
なんてことがよくある。
そんな時にとりあえず簡単に指定した範囲にpingを打って、返ってくるようだったらmacアドレスを取得して、できれば名前を取得する、
なんてコードがあったら便利。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$array = @(1..10) foreach($_ in $array){ $ip = "192.168.1." + $_; $p = ping $ip -n 1; # ping が返ってきて、時間の計測ができるかを確認。 If($p[2] -Like "*ms*"){ # macアドレスを取得。 $q = arp -a $ip; # 自分自身かどうかを確認。 If($q.Length -lt 10){ # 名前取得 $r = (nbtstat -A $ip); $str = $p[2] + "`t`t" + $q[3].Substring(24, 17); # できていれば出力 If($r[10] -and $r[10].IndexOf("<20>") -gt 0){ $str + $r[10].Substring(0, $r[10].IndexOf("<20>")) }else{ $str } } }else{ $p[1] + $p[2] } } |
↓一行にすると
1 |
1..10|%{$ip = "192.168.1." + $_;$p = ping $ip -n 1;If($p[2] -Like "*ms*"){$q = arp -a $ip;If($q.Length -lt 10){$r = (nbtstat -A $ip);$str = $p[2] + "`t`t" + $q[3].Substring(24, 17);If($r[10] -and $r[10].IndexOf("<20>") -gt 0){$str + $r[10].Substring(0, $r[10].IndexOf("<20>"))}else{$str}}}else{$p[1] + $p[2]}} |
◆参考
【PowerShell】大量にpingを打つときに結果を1行にまとめて可読性をあげてみる
https://www.tekizai.net/entry/powershell_ping_3
PowerShell の foreach (ForEach-Object) の使い方
https://microsoftou.com/ps-foreach/