Как мне преобразовать несколько строк в IP-адрес в Powershell, чтобы я мог отфильтровать IPv6 - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно вытащить файл журнала, который содержит список IP-адресов в журнале windows с некоторыми другими вещами. Я понял, как отфильтровать его до IP-адреса, но я изо всех сил пытаюсь преобразовать его в объект IP-адреса, чтобы я мог отфильтровать записи IPv6.

В производстве я буду использовать что-то вроде это, чтобы получить журнал:

$log = Get-Eventlog -Logname ABC -Source WIN-ABC -Newest 1 -ErrorAction stop

.txt или файл журнала выглядит так:

Compare-DomainControllers

Customer.local
192.168.1.100
192.168.1.101
192.168.1.102 
2580:83:0:f2e:b25a:625f:c254:eb29
10.10.10.20 
etc...

То, что у меня есть сейчас при тестировании:

$IPFullList = Get-content -path .\test.txt (Fake Log File) $IPOnly = $IPFullList | Select-String -match "[0-9]"

Это возвращает список только элементов IPv4 и IPv6, но я надеюсь взять этот список и преобразовать записи в [IPAddress] объекты, чтобы я мог отфильтровать элементы IPv6.

Я пробовал:

ConvertFrom-String -Inputobject $IPOnly

и:

Foreach ($IP in IPOnly){ [IPaddress] | Where-Object {$_.Type -ne "AAAA"} | Write-Host }

Кажется, никто из них не помогает. Будем признательны за любые идеи или предложения!

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете сделать следующее:

$IPFullList = Get-content -Path .\test.txt
$IPOnly = [IPAddress[]]($IPFullList -match '(?:\d{1,3}\.){3}\d{1,3}').Trim()

Результатом будет массив адресов IPv4, хранящихся в $IPOnly.

-match использует сопоставление регулярных выражений и возвращает соответствующие строки если вход (левая часть) является массивом. Если вы передаете только одну строку, -match вернет только $true или $false.

* Метод 1013 * используется для удаления пробелов в начале и конце каждой строки.


Если вы хотите обрабатывать каждый IP по отдельности, вы можете перенаправить на Foreach-Object:

$IPFullList = Get-content -Path .\test.txt
$IPOnly = ($IPFullList -match '(?:\d{1,3}\.){3}\d{1,3}').Trim() | Foreach-Object {
    [IPAddress]$_ # Returns the IPAddress object
}
...