我有一个适用于Windows 2012的脚本(PowerShell v4),但它也适用于Windows 2008(PowerShell v2),相当于cmdlet" Resolve-DNSName"对于Windows 2008?
Resolve-DnsName -Name client01 -Server server01
我知道nslookup的存在相同,这就是我想要的cmdlet(单行,我的部分无需输入)
nslookup
server server01
client01
以下适用于DNS解析,但缺少-server参数:
[Net.DNS]::GetHostEntry("MachineName")
由于
答案 0 :(得分:2)
不幸的是,在Windows 8.1或Server 2012中的版本4之前的PowerShell中没有办法原生地执行此操作。但是有.NET方法:
https://stackoverflow.com/a/8227917/4292988
PowerShell中最简单的解决方案是调用nslookup
,并清理输出
&nslookup.exe client01 server01
我从原始示例中删除了select-string,但是它更少用于
你发布的功能在我的后面运行得不是很好,并且永远不会在PowershellV2中工作,直到v3才支持[PSCustomObject]
。此外,如果您发送通常返回单个地址的DNS查询,则不返回任何内容。对于具有别名的查询,它返回ipaddress应该位于的别名。测试Resolve-DnsName2008 -name www.stackoverflow.com -server 8.8.8.8
。
以下是一个应该按照你的要求做的功能,至少对于ipv4addresses:
function Resolve-DnsName2008
{
Param
(
[Parameter(Mandatory=$true)]
[string]$Name,
[string]$Server = '127.0.0.1'
)
Try
{
$nslookup = &nslookup.exe $Name $Server
$regexipv4 = "^(?:(?:0?0?\d|0?[1-9]\d|1\d\d|2[0-5][0-5]|2[0-4]\d)\.){3}(?:0?0?\d|0?[1-9]\d|1\d\d|2[0-5][0-5]|2[0-4]\d)$"
$name = @($nslookup | Where-Object { ( $_ -match "^(?:Name:*)") }).replace('Name:','').trim()
$deladdresstext = $nslookup -replace "^(?:^Address:|^Addresses:)",""
$Addresses = $deladdresstext.trim() | Where-Object { ( $_ -match "$regexipv4" ) }
$total = $Addresses.count
$AddressList = @()
for($i=1;$i -lt $total;$i++)
{
$AddressList += $Addresses[$i].trim()
}
$AddressList | %{
new-object -typename psobject -Property @{
Name = $name
IPAddress = $_
}
}
}
catch
{ }
}
答案 1 :(得分:0)
我使用此代码每行输入一个FQDN并输出相应的IP。
x.append(int(splitUp[0]))
答案 2 :(得分:-1)
问题在于,如果我使用:
&nslookup.exe client01 server01 | select-string "Name", "Addresses"
它只会显示第一条记录,在我的情况下,我找到了5条记录,只显示了一条记录。
我发现的解决方案非常有效:
function Resolve-DNSName2008
{
Param
(
[string]$Name,
[string]$Server
)
$nslookup = &nslookup.exe $Name $Server
$name = [string]($nslookup | Select-String "Name")
$nameClean = ([regex]::match($name,'(?<=:)(.*\n?)').value).Trim()
$addresses = (([regex]::match($nslookup,'(?<=Addresses:)(.*\n?)').value).Trim()).Split(' ')
$addressesClean = $addresses.Split('',[System.StringSplitOptions]::RemoveEmptyEntries) | Sort-Object
$addressesClean | %{
[PSCustomObject]@{
Name = $nameClean
IPAddress = $_
}
}
}
用法:
Resolve-DNSName2008 -Name server.domain.com -Server 10.0.0.0
输出:
Name IPAddress
---- ---------
server.domain.com 10.0.0.1
server.domain.com 10.0.0.2
server.domain.com 10.0.0.3
server.domain.com 10.0.0.4
server.domain.com 10.0.0.5