gpt4 book ai didi

arrays - 解析 Powershell 数组中的 RegEx IP 匹配项

转载 作者:行者123 更新时间:2023-12-02 08:10:28 25 4
gpt4 key购买 nike

我正在尝试找出如何解析 IP 地址数组。到目前为止,我已经弄清楚如何将 IP 解析为 DNS 主机名:

Function Get-IP-Hostname
{
Param([string[]]$array)

$array.length

foreach ($element in $array)
{
$hname = [System.Net.Dns]::GetHostByAddress($element).HostName

$regex = "[regex] (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"

@{$element = $hname}
}
}

当我执行

Get-IP-Hostname 192.168.150.xx 192.168.151.xx  

对于一堆 IP,我必须使用逗号来拆分、分隔字符串 - 我的 RegEx 似乎没有逗号来拆分。

我正在尝试获取此输出:

> Name                           Value                                  
>
> ---- -----
> 192.168.150.xx ank70dom07.akgroup.com
> 192.168.151.xx ank70dom07.akgroup.com

我是 PowerShell 的新手,非常感谢任何帮助。

谢谢!

最佳答案

如果您希望能够以这种方式传递它们(作为额外参数),请在您的参数上使用 [ValueFromRemainingArguments()]

还有一种比正则表达式更好的方法来验证 IP 地址:只需将其转换为 [ipaddress]

function Get-IP-Hostname {
[CmdletBinding()]
param(
[Parameter(ValueFromRemainingArguments = $true)]
[String[]]
$IPAddress
)

foreach ($element in $IPAddress) {
$ip = $element -as [Net.IPAddress]
if ($ip) {
@{$element = [Net.Dns]::GetHostByAddress($element).HostName}
} else {
# handle invalid IP (or don't)
}
}
}

您可以通过将参数设为 IP 地址数组 ([ipaddress[]]) 来进一步简化此过程,因为字符串转换将自动完成:

function Get-IP-Hostname {
[CmdletBinding()]
param(
[Parameter(ValueFromRemainingArguments = $true)]
[IPAddress[]]
$IPAddress
)

foreach ($ip in $IPAddress) {
@{$ip = [Net.Dns]::GetHostByAddress($ip.IPAddressToString).HostName}
}
}

这里的障碍是,即使传入的地址之一无效,整个调用也会失败。所以这取决于你想做什么。

还有一个建议:不要每次都返回一个只有一个元素的新哈希表。它在屏幕上看起来是正确的,但它不是您真正想要的。您可以使用单个哈希表修复它,但我建议更好的方法:返回一个添加了 HostName 属性的 [IPAddress] 对象:

function Get-IP-Hostname {
[CmdletBinding()]
param(
[Parameter(ValueFromRemainingArguments = $true)]
[String[]]
$IPAddress
)

foreach ($element in $IPAddress) {
$ip = $element -as [Net.IPAddress]
if ($ip) {
$ip |
Add-Member -NotePropertyName HostName -NotePropertyValue ([Net.Dns]::GetHostByAddress($ip.IPAddressToString).HostName) -PassThru
} else {
# handle invalid IP (or don't)
}
}
}

$results = Get-IP-Hostname 8.8.4.4 8.8.8.8

$results | fl * # all properties

$results | ft IPAddressToString,HostName # demonstrating what you want

关于arrays - 解析 Powershell 数组中的 RegEx IP 匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com