windows dhcp 控制台无法直接导出空闲ip列表,需通过powershell组合命令:先获取作用域范围,再提取活跃租约与静态保留地址,最后用compare-object从全量ip中排除已占用项生成csv报表。
windows 自带的 dhcp 管理器(即 dhcp 控制台 mmc)不提供直接导出“未使用空闲 ip 地址”的审计报表功能,更不存在“一键命令行导出空闲 ip 列表”的原生命令。这是常见误解——dhcp 服务本身不主动维护、也不对外暴露“当前未分配但属于作用域范围内”的完整空闲地址清单;它只记录已分配(租约)、已预留、已拒绝或已过期的地址状态。
不过,你可以通过组合系统工具和逻辑推导,近似生成空闲 IP 审计报表。关键不是“导出空闲”,而是“从作用域范围中排除已知占用项,得出剩余可用地址”。以下是可行、稳定、无需第三方工具的实操路径:
1. 先获取 DHCP 作用域完整地址范围
需知道子网、掩码、起始/结束地址。可通过 PowerShell 快速查出:
Get-DhcpServerv4Scope | Select-Object ScopeId, StartRange, EndRange, SubnetMask, Name
✅ 注意:此命令需在已安装
DhcpServer模块的 Windows Server 上运行(非 Win10/11 客户端),且账户有 DHCP 管理权限。
2. 获取所有当前活跃租约(已分配 IP)
Get-DhcpServerv4Lease -ScopeId 192.168.1.0 | Select-Object IPAddress, ClientIP,ClientId,IpAddress,LeaseExpiryTime
⚠️ 输出含重复、过期、冲突等状态,建议加
-LeaseExpiryTime (Get-Date).AddHours(-1)过滤近期有效租约。
3. 获取所有静态保留地址(Reserved)
Get-DhcpServerv4Reservation -ScopeId 192.168.1.0 | Select-Object IPAddress,ClientId,Description
4. 合并占用地址 → 生成空闲 IP 列表(PowerShell 脚本核心逻辑)
以下为可直接运行的简化脚本片段(保存为 .ps1,以管理员身份执行):
$Scope = Get-DhcpServerv4Scope | Where-Object {$_.ScopeId -eq "192.168.1.0"}
$Used = @(
(Get-DhcpServerv4Lease -ScopeId $Scope.ScopeId).IPAddress |
ForEach-Object { [ipaddress]$_ } |
Sort-Object -Unique
(Get-DhcpServerv4Reservation -ScopeId $Scope.ScopeId).IPAddress |
ForEach-Object { [ipaddress]$_ } |
Sort-Object -Unique
) | Sort-Object -Unique
$AllIPs = for ($i = [ipaddress]::Parse($Scope.StartRange).GetAddressBytes()[3];
$i -le [ipaddress]::Parse($Scope.EndRange).GetAddressBytes()[3];
$i++) {
"$($Scope.ScopeId.ToString().Split('.')[0..2] -join '.')$i"
}
$Free = Compare-Object -ReferenceObject $AllIPs -DifferenceObject $Used -PassThru |
Where-Object { $_.SideIndicator -eq '<blockquote><p>✅ 输出为 CSV 表格,含全部空闲 IPv4 地址(格式如 <code>192.168.1.10</code>, <code>192.168.1.11</code>…),可直接导入 Excel 做审计。</p></blockquote><h3>5. 补充说明:为什么不能“一键”?</h3>
- DHCP 服务不扫描网络,不 Ping 检测地址是否真实空闲(避免广播风暴);
- “空闲”是逻辑计算结果,非实时探测结果;
- 若存在手动配置的静态设备(未做 DHCP 预留),该脚本无法识别其占用,需结合 ARP 表或路由器 DHCP 客户端列表交叉验证。
不复杂但容易忽略。











