我有一个IP地址列表。它们都以10.10开始。我想要第三个八位位组的所有唯一值。这样,我就可以计算出该唯一值中有多少个。
10.10.26.251
10.10.27.221
10.10.26.55
10.10.31.12
10.10.12.31
10.10.31.11
10.10.27.15
10.10.26.5
完成后,我想知道我有3个.26网络设备,2个27等,依此类推。除了通过拆分分解八位字节并循环遍历每个八位字节之外,我想不出任何单个内衬。有什么建议么?
答案 0 :(得分:1)
这是一个小的变体。 [<咧>咧嘴]我在注意到其他答案之前已经有了这个-有点不同。
它做什么...
[PSCustomObject]
$Octet3_Report
变量输出到CSV文件将很容易。这是代码...
$IP_List = @(
[ipaddress]'10.10.26.251'
[ipaddress]'10.10.27.221'
[ipaddress]'10.10.26.55'
[ipaddress]'10.10.31.12'
[ipaddress]'10.10.12.31'
[ipaddress]'10.10.31.11'
[ipaddress]'10.10.27.15'
[ipaddress]'10.10.26.5'
)
$Octet3_Report = $IP_List |
Group-Object -Property {$_.ToString().Split('.')[2]} |
ForEach-Object {
[PSCustomObject]@{
Octet_3 = $_.Name
Count = $_.Count
}
}
$Octet3_Report
屏幕输出...
Octet_3 Count
------- -----
26 3
27 2
31 2
12 1
答案 1 :(得分:0)
就像我在事后弄清楚了。 返回包含dns记录。 IP地址存储在recorddata中。我拉下IP地址的末尾。然后仅获取范围进行循环,并使用foreach循环进行计数以使其更干净。
$DNSRecordCounts = @()
$Ranges = ($Return | where-object {$_.recorddata -like "10.10.*"}).recorddata -replace "\.\d{1,3}$" | select -Unique
foreach ($range in $Ranges) {
$DNSRecordCounts += [pscustomobject][ordered]@{
IPRange = $range
Count = ($Return | Where-Object {$_.recorddata -like "$($range).*"}).Count
}
}
答案 2 :(得分:0)
根据您的问题以及我从自己的回答中可以得出的结论,如果您正在寻找更像“惯用” PowerShell的内容,则需要以下内容:
$Return `
| Select-Object -ExpandProperty recorddata `
| ForEach-Object {
$_ -match "\d+\.\d+\.(?<octet>\d+)\.\d+" | Out-Null
$Matches.octet
} `
| Group-Object `
| ForEach-Object {
[PSCustomObject]@{
Octet = $_.Name
Count = $_.Count
}
}