Преобразовать результат цикла for в таблицу

Я не могу преобразовать следующий цикл for в таблицу:

for ($i=1; $i -le 10; $i++) 
{ 
    $ErrorActionPreference= 'silentlycontinue' 
    Write-Progress -PercentComplete ((100*$i)/255) -Activity "Gathering IP's"  

    nslookup("192.168.2." + $i) | Format-Table
}

Единственное, что происходит, это то, что для каждого адреса, который недоступен, он показывает имя маршрутизатора /ip:

Server:  easy.box.local
Address:  192.168.2.1

Name:    easy.box.local
Address:  192.168.2.1

Server:  easy.box.local
Address:  192.168.2.1

Я хочу отсортировать его как таблицу, чтобы сделать ее более удобной и удобной для просмотра

2 ответа

Решение

Если вы работаете на компьютере с Windows 8 или более поздней версией, вы можете использовать [System.Net.Dns]::Resolve (обратите внимание, что в случае неудачного поиска в качестве имени хоста будет указан IP-адрес)

for ($i=1; $i -le 10; $i++) { 
    Write-Progress -PercentComplete ((100*$i)/255) -Activity "Gathering IP's"  
    [System.Net.Dns]::Resolve("192.168.2." + $i) | Select HostName,AddressList
}

Вы можете использовать регулярные выражения, чтобы получить информацию и создать новый объект, который сделает ее сортируемой:

$ErrorActionPreference= 'silentlycontinue' 
for ($i=1; $i -le 10; $i++) 
{ 
    Write-Progress -PercentComplete ((100*$i)/255) -Activity "Gathering IP's"  

    $nsLookupResult = nslookup("192.168.2." + $i)
    [PSCustomObject]@{
        Server = [regex]::Match($nsLookupResult,'Server:\s+(\S+)').Groups[1].Value
        Address = [regex]::Match($nsLookupResult,'Address:\s+(\S+)').Groups[1].Value
    }
}

Выход:

Server           Address        
------           -------        
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254
easy.box.loca 192.168.150.254

Примечание. Там может быть встроенный командлет PowerShell, который сделает это устаревшим.

Примечание 2: Вам нужно только установить $ErrorActionPreference однажды вот почему я установил это вне цикла for.

Другие вопросы по тегам