Windows DHCP 服务器 - 用于删除同一主机名的重复租约的脚本

Windows DHCP 服务器 - 用于删除同一主机名的重复租约的脚本

我正在考虑创建一个脚本,用于清除基于 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-DhcpServerv4LeaseRemove-DhcpServerv4Leasecmdlet。首先,我们将获取所有当前租约:

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}

相关内容