我将如何在Powershell中将多个字符串转换为IP地址,以便过滤出IPv6

问题描述 投票:0回答:1

我必须在Windows日志中提取包含IP地址列表的日志文件以及其他内容。我已经找到了如何将其过滤为仅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 }

他们似乎都不是骗人的。任何想法或建议将不胜感激!

windows powershell ipv6 ipv4
1个回答
0
投票

您可以执行以下操作:

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

结果将是$IPOnly中存储的IPv4地址数组。

-match使用正则表达式匹配,如果输入(左侧)是数组,则将返回匹配的字符串。如果仅传递单个字符串,则-match将仅返回$true$false

Trim()方法用于删除每个字符串开头和结尾的空格。


如果要分别处理每个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
}
© www.soinside.com 2019 - 2024. All rights reserved.