我如何将多个字符串转换为 Powershell 中的 IP 地址,以便我可以过滤掉 IPv6
How would I convert multiple strings to an IP address in Powershell so I can filter out IPv6
我必须提取一个日志文件,其中包含 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]"
这个 returns 仅包含 IPv4 和 IPv6 项目的列表,但我希望获取该列表并将条目转换为 [IPAddress] 对象,以便我可以过滤掉 IPv6 项目。
我试过了:
ConvertFrom-String -Inputobject $IPOnly
和:
Foreach ($IP in IPOnly){
[IPaddress] | Where-Object {$_.Type -ne "AAAA"} | Write-Host
}
似乎没有人能做到这一点。任何想法或建议将不胜感激!
您可以执行以下操作:
$IPFullList = Get-content -Path .\test.txt
$IPOnly = [IPAddress[]]($IPFullList -match '(?:\d{1,3}\.){3}\d{1,3}').Trim()
结果将是存储在 $IPOnly
中的 IPv4 地址数组。
-match
使用正则表达式匹配,如果输入(左侧)是一个数组,将 return 匹配字符串。如果您只传递一个字符串,-match
将仅 return $true
或 $false
。
Trim()
方法用于去除每个字符串开头和结尾的白色space。
如果你想单独处理每个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
}
我必须提取一个日志文件,其中包含 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]"
这个 returns 仅包含 IPv4 和 IPv6 项目的列表,但我希望获取该列表并将条目转换为 [IPAddress] 对象,以便我可以过滤掉 IPv6 项目。
我试过了:
ConvertFrom-String -Inputobject $IPOnly
和:
Foreach ($IP in IPOnly){
[IPaddress] | Where-Object {$_.Type -ne "AAAA"} | Write-Host
}
似乎没有人能做到这一点。任何想法或建议将不胜感激!
您可以执行以下操作:
$IPFullList = Get-content -Path .\test.txt
$IPOnly = [IPAddress[]]($IPFullList -match '(?:\d{1,3}\.){3}\d{1,3}').Trim()
结果将是存储在 $IPOnly
中的 IPv4 地址数组。
-match
使用正则表达式匹配,如果输入(左侧)是一个数组,将 return 匹配字符串。如果您只传递一个字符串,-match
将仅 return $true
或 $false
。
Trim()
方法用于去除每个字符串开头和结尾的白色space。
如果你想单独处理每个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
}