[英]Powershell: Filtering server list by the 2nd octet of the IP address
[英]Select all unique third octet in a list of IP addresses with PowerShell
我有一個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等,依此類推。 除了通過拆分分解八位字節並循環遍歷每個八位字節之外,我想不出任何單個內襯。 有什么建議么?
這是一個小變體。 [ 咧嘴 ]在注意到其他答案之前,我已經有了這個-有點不同。
它能做什么 ...
[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
就像我在事后弄清楚了。 返回包含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
}
}
根據您的問題以及我從您自己的答案中可以得出的結論,如果您正在尋找類似於“慣用” 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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.