有没有办法从IP地址获取主机名而不依赖DNS查询?

时间:2017-07-21 15:58:07

标签: powershell hostname

我正在尝试编写一个依赖于知道网段上计算机名称的脚本,但我发现的所有脚本都依赖于DNS查询,该查询只回复一些机器的名称。例如:

[System.Net.Dns]::GetHostbyAddress($IPAddress) 

我也尝试过使用

Ping -a $ipaddress

但这通常也无法返回机器名称。有没有办法直接询问主机的名称是什么,以及AD可能需要多大的权限才能获得响应?
提前谢谢。

7 个答案:

答案 0 :(得分:0)

您可以尝试使用以下内容: Invoke-Command -computername $ computer {Get-Item HKLM:\ SYSTEM \ ControlSet001 \ Control \ ComputerName \ ActiveComputerName} 活动的计算机名称等于您的DNS名称(没有后缀)

答案 1 :(得分:0)

[System.Net.DNS]::GetHostByAddress()(现在[System.Net.DNS]::GetHostEntry())并不仅仅依赖DNS,尽管它的名称。它还将检查本地C:\Windows\System32\Drivers\etc\hosts文件以查找本地配置的条目。

通过nslookup的直接dns无法找到名称:

PS C:\Users\Tim> nslookup 192.168.1.50
Server:  dns03
Address:  192.168.2.103

*** rpi03 can't find 192.168.1.50: Non-existent domain

然而,gethostentry()仍然找到名称:

PS C:\Users\Tim> [system.net.dns]::gethostentry('192.168.1.50')

HostName  Aliases AddressList
--------  ------- -----------
localentry {}      {192.168.1.50}

答案 2 :(得分:0)

我可能误解了这个问题但您可以使用CIM会话查询Win32_ComputerSystem实例到远程计算机并使用其中一个属性(名称,DNSName等)在本地运行它就像

Get-CimInstance -namespace root/cimv2 -classname Win32_ComputerSystem | fl *

我知道WMI可能会获得相当高的权限(例如,域管理员),但(a)对于您的用例可能不是不可能的;(b)您可能能够做一些有限的权限查询权限较少。

答案 3 :(得分:0)

另一种想法可能是查询您的SCCM服务器:

(Get-WmiObject -Query "SELECT * from SMS_R_SYSTEM WHERE IPAddresses LIKE '%$ipaddress%'" -Namespace "root\sms\site_$SiteCode" -computerName $SCCMServer).Name

答案 4 :(得分:0)

您可以从广告中获得。 Get-ADComputer <Computername> -Properties * | Select IPv4Address。 查看您是否可以使用ADSISearcher并获取IP地址。这样,您将不需要AD模块。

答案 5 :(得分:0)

命令:

wmic.exe /node:10.20.30.40 OS get CSName /format:list 

整个子网的打包文件:

for /L %%z in (1,1,254) do wmic.exe /node:10.20.30.%%z OS get CSName /format:list 2>NUL

答案 6 :(得分:0)

使用 powershell 的另一个想法:

Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Computer -Property Name | ForEach-Object {$_.Name}

其中 $Computer 是 IP 地址