1

そこで、ネットワーク全体に ping を実行する簡単な pinger を作成しました。テスト接続を使用していますが、デバイス名も取得する必要があります。

だから私は名前を取得するためにcmdのnbtstatを使用していますが(きれいではないとしましょう)

これを少しきれいにする方法はありますか?

これは私が持っているものです

$a = New-Object System.Collections.ArrayList

for ($i =0;$i -le 225; $i++){
    if (Test-Connection 192.168.1.$i -Count 1 -Quiet){
        echo "live 192.168.1.$i"
        $a.add("192.168.1.$i")
    }else {
        echo "dead 192.168.1.$i"
    }
}
echo $a
foreach ($i in $a){
    Test-Connection $i -Count 1

}

foreach ($i in $a){
    nbtstat -a $i
}
4

3 に答える 3

3

私はそれを少し違う方法で行います。ホストに接続するたびに、ARP エントリが作成されます。それを活用してみませんか?

Get-WmiObject Win32_PingStatus -Filter "Address='192.168.1.2' AND ResolveAddressNames='true'" | 
Select IPV4Address, ProtocolAddressResolved, @{
    Name="PhysicalAddress";Expression={
        ([regex]::Matches($(arp -a $_.IPV4Address),"[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}",@('MultiLine', 'Ignorecase'))).value
    }
}
于 2013-07-24T14:59:10.653 に答える