gpt4 book ai didi

powershell - Windows 2008的DNS解析名称

转载 作者:行者123 更新时间:2023-12-02 23:59:11 25 4
gpt4 key购买 nike

我有一个适用于Windows 2012(PowerShell v4)的脚本,但它也必须适用于Windows 2008(PowerShell v2),Windows 2008的cmdlet“Resolve-DNSName”等效项是什么?

Resolve-DnsName -Name client01 -Server server01

我知道它与nslookup存在相同,这就是我想要的cmdlet(单行代码,不需要我输入的内容)
nslookup
server server01
client01

以下内容可用于DNS解析,但缺少-server参数:
[Net.DNS]::GetHostEntry("MachineName")

谢谢

最佳答案

不幸的是,没有一种方法可以在Windows 8.1或Server 2012中的版本4之前的Powershell中本地执行此操作。但是,有.NET方法:

https://stackoverflow.com/a/8227917/4292988

Powershell中最简单的解决方案是调用nslookup,并清理输出

&nslookup.exe client01 server01

我从原始样本中删除了选择字符串,使用起来少了点

您在我的发布的功能无法很好地运行,并且在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
{ }
}

关于powershell - Windows 2008的DNS解析名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34688342/

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