通过 powershell 的 get-dhcpserverv4lease 命令查询 dhcp 服务器租约记录,使用标准化小写无横线 mac 地址(如 'b4b686b41234')匹配 clientid 字段,结果中 ipaddress 即为当前分配的 ipv4 地址。
在 windows server 环境中,若已知某设备的 mac 地址(即 dhcp 客户端 id),想快速查出它当前被分配的 ip 地址,核心方法是查询 dhcp 服务器上的租约记录。这需要你有权限访问运行 dhcp 服务的 windows server(通常是本机或域内指定服务器),且已安装 dhcp server tools(属于 rsat 功能)。
确认 DHCP 服务器角色已启用并可管理
执行以下命令检查是否已安装 DHCP 模块:
- Get-Command -Module DhcpServer —— 若返回大量 cmdlet(如 Get-DhcpServerv4Lease),说明模块就绪;
- 若提示“找不到模块”,需先运行:Add-WindowsFeature RSAT-DHCP(Server Core)或通过“服务器管理器”添加“DHCP 服务器工具”。
用 Get-DhcpServerv4Lease 直接匹配 MAC 地址
Windows DHCP 服务将 MAC 地址存为 ClientId 字段(格式通常为纯十六进制字符串,无分隔符,如 b4b686b41234 或 B4-B6-86-B4-12-34 的变体)。推荐使用标准化小写无横线格式查询:
- 查本机 DHCP 服务器所有 IPv4 租约中匹配该 MAC 的记录:
Get-DhcpServerv4Lease -ClientId 'b4b686b41234' - 若不确定是否在本机,指定远程服务器:
Get-DhcpServerv4Lease -ComputerName "dhcp01.contoso.local" -ClientId 'b4b686b41234' - 结果中 IPAddress 列即为当前分配的 IPv4 地址;ClientIP 字段在部分版本中也有效,但以 IPAddress 为准。
批量扫描多个作用域或模糊匹配
当不确定该 MAC 属于哪个作用域,或需处理带横线/大小写的输入时,可结合管道过滤:
- 遍历全部作用域并搜索(适合多子网环境):
Get-DhcpServerv4Scope | Get-DhcpServerv4Lease | Where-Object { $_.ClientId -like '*b4b686b4*' } | Select-Object IPAddress, ClientId, ScopeId, LeaseExpiryTime - 统一格式化后再匹配(兼容常见输入习惯):
$mac = 'B4-B6-86-B4-12-34'.Replace('-','').ToLower(); Get-DhcpServerv4Lease | Where-Object { $_.ClientId -eq $mac }
补充:若 DHCP 服务不在本地,但你能登录客户端设备
在目标设备(非服务器)上,可用 PowerShell 快速确认它自己拿到的 IP 和 MAC:
- Get-NetAdapter | Where-Object Status -eq 'Up' | ForEach-Object { $_.MacAddress; (Get-NetIPAddress -AddressFamily IPv4 -ifIndex $_.ifIndex).IPAddress }
- 注意:此法只查本机,不能反向从 MAC 查 IP——必须依赖 DHCP 服务器日志或租约数据库。











