AK3*_*K37 2 regex arrays powershell split match
我试图找出如何解析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}
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行
Get-IP-Hostname 192.168.150.xx 192.168.151.xx
Run Code Online (Sandbox Code Playgroud)
有一堆IP我必须使用逗号分割,分隔字符串 - 我的RegEx似乎没有逗号分裂.
我想获得这个输出:
> Name Value
>
> ---- -----
> 192.168.150.xx ank70dom07.akgroup.com
> 192.168.151.xx ank70dom07.akgroup.com
Run Code Online (Sandbox Code Playgroud)
我是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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将参数设置为ipaddresses([ipaddress[]])数组来进一步简化此操作,因为字符串的转换将自动完成:
function Get-IP-Hostname {
[CmdletBinding()]
param(
[Parameter(ValueFromRemainingArguments = $true)]
[IPAddress[]]
$IPAddress
)
foreach ($ip in $IPAddress) {
@{$ip = [Net.Dns]::GetHostByAddress($ip.IPAddressToString).HostName}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的障碍是,即使其中一个传入的地址无效,整个调用也将失败.所以这取决于你想做什么.
还有一个建议:每次都不要返回一个包含单个元素的新哈希表.它看起来在屏幕上,但它不是你真正想要的.您可以使用单个哈希表修复它,但我建议更好一些:返回[IPAddress]具有添加HostName属性的对象:
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
Run Code Online (Sandbox Code Playgroud)