【发布时间】:2020-09-15 22:46:29
【问题描述】:
我必须提取一个日志文件,其中包含 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
}
他们似乎都没有成功。任何想法或建议将不胜感激!
【问题讨论】:
-
检查 .net 或 powershell 正则表达式(我个人更喜欢 .net 正则表达式)。 IPv4 地址将与 IPv6 地址根本不同,它应该很容易通过这两个记录之间的正则表达式匹配来区分。 [0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3} 应该成为 ipv4 匹配,将所有其他作为 ipv6 地址作为开始
-
谢谢,这也很有帮助。正则表达式是要走的路。
标签: windows powershell ipv6 ipv4