我正在尝试编写一个依赖于知道网段上计算机名称的脚本,但我发现的所有脚本都依赖于DNS查询,该查询只回复一些机器的名称。例如:
[System.Net.Dns]::GetHostbyAddress($IPAddress)
我也尝试过使用
Ping -a $ipaddress
但这通常也无法返回机器名称。有没有办法直接询问主机的名称是什么,以及AD可能需要多大的权限才能获得响应?
提前谢谢。
答案 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 地址