如何在没有 DnsServer 模块的情况下使用 PowerShell 检索所有 DNS 记录?

How to retrieve all DNS records using PowerShell without DnsServer module?

我正在使用 Windows Server 2008 R2。我发现的每个 post 都建议对 Powershell 使用 DnsServer 模块,但这些机器不支持它。那么我还能如何获得这些记录呢?我正在尝试将它们导出到 CSV 文件。 "nslookup" 并没有真正做到这一点。

至于……

I'm using a Windows Server 2008 R2. Every post I find suggests using DnsServer module for Powershell, but it is not supported for these machines.

... 那不是一个有效的陈述。它们在 Win7 和 W2K8 上受支持。哎呀,你可以在 Vista 上使用它们 - 正如 Microsoft 所记录的那样。

Description of Windows Server 2008 Remote Server Administration Tools for Windows Vista Service Pack 1

System requirements

RSAT can be installed on 32-bit and 64-bit editions of the following configurations: Windows Vista Ultimate with SP1 or a later Windows Vista service pack

  • Windows 带有 SP1 或更高版本的 Vista Enterprise Windows Vista 服务包
  • Windows 带有 SP1 或更高版本的 Vista Business Windows Vista 服务包
  • RSAT 可用于管理 Windows Server 2008 的 32 位和 64 位版本。

RSAT should not be installed on a computer that is running the Windows Server 2003 Administration Tools Pack or the Windows 2000 Server Administration Tools Pack. Please remove all Administration Tools Pack versions from the computer before you install RSAT.

Only one copy of RSAT can be installed on a computer at one time. Before you install a new package, remove any existing versions of RSAT. This includes any copies that are in different languages.

您需要在您的 Win7 主机上安装 RAT 工具,您必须在 W2K8/R2 上启用它们。

Remote Server Administration Tools for Windows 7 with Service Pack 1 (SP1)

实际上,如果那是不允许的。您不需要安装 RSAT 工具,您可以将它们从任何 DC 或服务器 运行 RSAT 代理到您的工作站。这是一种非常普遍的做法,它被称为隐式远程处理,并且在网络上的大量资源中都有详细记录。否则,您需要使用 ADSI、.Net 库...

Dns.GetHostEntry Method

Dns.GetHostByAddress Method

# The following code returns the IPv4 address of a given alias or host: 
[System.Net.Dns]::GetHostAddresses('someDnsName').IPAddressToString

# The below code returns the HostName (CName) and aliases of an IP: 
[System.Net.Dns]::GetHostByAddress('172.12.34.56')

$name = 'someName'
$fqdn = [System.Net.Dns]::GetHostEntry($name).HostName 
$ip = [System.Net.Dns]::GetHostAddresses($fqdn).IPAddressToString
$result = [System.Net.Dns]::GetHostByAddress($ip) 

... 或其他 3rdP 工具。然而,如果你使用这个 3rdP 路由,你也可以在你的一台机器上安装官方的 RSAT。

使用 'Use PowerShell Active Directory Cmdlets Without Installing' 或 'windows 7 get dns records' 进行快速搜索将为您提供包含示例的列表。

Use PowerShell Active Directory Cmdlets Without Installing Any Software

Using AD module without loading RSAT

因此,您可以使用以下示例从远程 Windows Server 2008 R2(DC 或成员服务器或安装了用于 AD 的 RSAT 的工作站)导入 Active Directory cmdlet:

$session = New-PSSession -computerName 'TargetMachineWithRsat'
Invoke-Command { Import-Module ActiveDirectory } -Session $session
Import-PSSession $session

另一种方法是将远程 PowerShell 会话导出到本地模块:

$session = New-PSSession -computerName 'TargetMachineWithRsat'
Invoke-Command { Import-Module ActiveDirectory } -Session $session
Export-PSSession -Session $session -CommandName *-AD* -Outputmodule ActiveDirectory -AllowClobber

使用

加载模块
Import-Module ActiveDirectory