【问题标题】:Resolve-DNSName for Windows 2008Windows 2008 的解析 DNSName
【发布时间】:2016-01-09 00:30:26
【问题描述】:

我有一个适用于 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")

谢谢

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    不幸的是,在 Windows 8.1 或 Server 2012 的版本 4 之前的 powershell 中,没有办法在本机上执行此操作。但是有 .NET 方法:

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

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

    &nslookup.exe client01 server01
    

    我从原始示例中删除了 select-string,它可以使用的内容更少

    你在我下面发布的功能不太好,并且永远不会在 PowershellV2 中工作,[PSCustomObject] 直到 v3 才支持。此外,如果您发送通常会返回单个地址的 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 
        { }
    }
    

    【讨论】:

      【解决方案2】:

      我使用此代码每行输入一个 FQDN 并输出相应的 IP。

      $Server = Get-Content servers.txt
      $OutArray = @()
      $output = foreach ($Server in $Server) {
          $IP = [System.Net.Dns]::GetHostAddresses($Server)
          $OutArray += $Server + "  " + $IP.IPAddressToString
      }
      
      $OutArray | Out-File IPs.txt
      

      【讨论】:

        【解决方案3】:

        问题是,如果我使用:

        &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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-27
          • 2010-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多