2016-12-05 68 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的輸出 –