我正在考虑创建一个脚本,用于清除基于 Windows Server 2008 R2 的 DHCP 服务器上的重复 DHCP 租约。我发现您无法在 PowerShell 中本机执行此操作,但您可以使用 PowerShell 调用 netsh.exe 命令,然后操作数据。
列出所有 DHCP 租约的命令:
netsh dhcp server 10.100.2.241 scope 10.100.0.0 show clients 1
最终的输出有点混乱:
Changed the current scope context to 10.100.0.0 scope.
Type : N - NONE, D - DHCP B - BOOTP, U - UNSPECIFIED, R - RESERVATION IP
============================================================================================
IP Address - Subnet Mask - Unique ID - Lease Expires -Type -Name
============================================================================================
10.100.0.51 - 255.255.248.0 - 00-11-22-33-44-55 -24/05/2016 21:29:01 -D- WT008064807e32.domain.com
10.100.0.52 - 255.255.248.0 - 00-11-22-33-44-55 -24/05/2016 20:13:47 -D- EXT1054.domain.com
10.100.0.53 - 255.255.248.0 - 00-11-22-33-44-55 -24/05/2016 22:54:14 -D- EXT1018.domain.com
10.100.0.54 - 255.255.248.0 - 00-11-22-33-44-55 -24/05/2016 11:01:57 -D- V2040.domain.com
10.100.0.55 - 255.255.248.0 - 00-11-22-33-44-55 -24/05/2016 19:50:19 -D- V1041.domain.com
----SNIP----
举例来说,主机 V2119 在输出中列出两次,具有不同的 IP 地址和租约到期时间:
V2119 - 10.100.6.45 - 24/05/2016 23:24:43
V2119 - 10.100.5.167 - 24/05/2016 23:06:21
在这个例子中,我将删除 10.100.5.167,因为它将更早过期,因此是较旧的租约并且是多余的。
通过 IP 删除特定租约的命令:
netsh dhcp server 10.100.2.241 scope 10.100.0.0 delete lease 10.100.5.167
我找到了这篇文章,原贴作者使用 PowerShell 中 netsh 命令的输出,然后修剪各个位以仅返回主机名和 IP 列表。虽然结果不是我想要的,但修剪可能会派上用场。-https://theadminguy.com/2009/10/14/export-dhcp-leases-to-html-using-powershell/
基本上,我需要一个脚本来输出 DHCP 中的所有租约,找出哪些主机名是重复的,然后从重复的主机名中找出哪些会提前过期并返回 IP 地址,然后将其输入到上面的 netsh delete lease 命令中。
如果您能提供任何帮助,我将非常感激。
如果您需要澄清任何内容,请联系我。
答案1
您正在寻找Get-DhcpServerv4Lease
和Remove-DhcpServerv4Lease
cmdlet。首先,我们将获取所有当前租约:
Get-DhcpServerv4Lease |
这将返回一堆实例DhcpServerv4Lease
。我们将按主机名对它们进行分组:
group HostName |
其余步骤必须按要求完成,ForEach-Object
因为我们需要查看每个组内部。
% { $_.Group |
我们将按到期时间降序对每组的内容进行排序,因此时间越晚的越早:
sort LeaseExpiryTime -Descending |
我们想保留第一个(最新的),所以我们将跳过它:
select -Skip 1 |
最后,我们将把剩下的一切都吹走:
Remove-DhcpServerv4Lease }
综合起来,我们得到了这个简短的脚本:
Get-DhcpServerv4Lease | group HostName | % {$_.Group | sort LeaseExpiryTime -Descending | select -Skip 1 | Remove-DhcpServerv4Lease}