2016-12-05 54 views
1

我不能转换以下for循环表:CONVER的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 
} 

出现这种情况的唯一的事情是,每ADRESS是不可达的,它显示了路由器名称/ 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 

我要像一个表对其进行排序,使之更加方便易多的可视

+0

对于不同方法,请尝试“Get-NetIPAddress -IPAddress 192.168.2。* | Format-Table” –

回答

1

如果您是Windows 8或更高版本的计算机上,你可以使用[System.Net.Dns] ::解决(注意,查找失败将有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 
} 
+0

这实际上非常整洁!非常感谢答复 –

1

你可以使用正则表达式 GRA b中的信息,并创建一个新的对象,这将使其排序:

$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循环之外的原因。

+0

感谢您的回复,但是如果您测试脚本,您将注意到如果查找成功或不成功,它将始终输出相同的iplesles –

+0

这就是nslookup的输出 –