将 for 循环的结果转换为 table
Conver the result of a for loop to a table
我无法将以下 for 循环转换为 table:
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
}
唯一发生的事情是对于每个无法访问的地址,它都会显示路由器 name/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
我想像 table 一样对其进行排序,以使其更方便和更容易查看
您可以使用 regex 获取信息并创建一个新对象,使其可排序:
$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 cmdlet,这会使它过时。
注意 2: 您只需设置 $ErrorActionPreference
一次,这就是为什么我将其设置在 for 循环之外的原因。
如果您使用的是 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
}
我无法将以下 for 循环转换为 table:
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
}
唯一发生的事情是对于每个无法访问的地址,它都会显示路由器 name/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
我想像 table 一样对其进行排序,以使其更方便和更容易查看
您可以使用 regex 获取信息并创建一个新对象,使其可排序:
$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 cmdlet,这会使它过时。
注意 2: 您只需设置 $ErrorActionPreference
一次,这就是为什么我将其设置在 for 循环之外的原因。
如果您使用的是 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
}