Windows DHCP Server - สคริปต์เพื่อลบสัญญาเช่าที่ซ้ำกันไปยังชื่อโฮสต์เดียวกัน


0

ฉันกำลังดูการสร้างสคริปต์ที่ล้างการทำสัญญาเช่า DHCP ซ้ำจากเซิร์ฟเวอร์ DHCP ที่ใช้ Windows Server 2008 R2 ของเรา ฉันพบว่าคุณไม่สามารถทำสิ่งนี้ได้ใน 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

ฉันพบบทความนี้โดย OP ใช้เอาท์พุทของคำสั่ง netsh ใน PowerShell แล้วตัดส่วนบิตต่าง ๆ เพื่อส่งกลับรายการชื่อโฮสต์และ IP เท่านั้น แม้ว่าผลลัพธ์จะไม่ใช่สิ่งที่ฉันตามมาการตัดแต่งอาจมีประโยชน์ - https://theadminguy.com/2009/10/14/export-dhcp-leases-to-html-using-powershell/

โดยทั่วไปฉันต้องการสคริปต์เพื่อส่งออกสัญญาเช่าทั้งหมดใน DHCP หาว่าชื่อโฮสต์ใดที่ซ้ำกันจากนั้นชื่อที่ทำซ้ำซึ่งจะหมดอายุก่อนหน้านี้และส่งคืนที่อยู่ IP จากนั้นไปป์ที่ลงในคำสั่ง netsh delete lease ด้านบน .

ความช่วยเหลือใด ๆ ที่คุณสามารถให้ฉันเกี่ยวกับเรื่องนี้จะเป็นที่น่าตื่นตาตื่นใจและชื่นชมอย่างมหาศาล

ให้ฉันตะโกนถ้าคุณต้องการอะไรที่ชัดเจน


โปรดทราบว่าSuper Userไม่ใช่บริการเขียนสคริปต์ หากคุณบอกเราถึงสิ่งที่คุณได้ลองมาแล้ว (รวมถึงสคริปต์ที่คุณใช้) และที่ที่คุณติดอยู่เราสามารถลองช่วยแก้ปัญหาเฉพาะได้ คุณควรอ่านฉันจะถามคำถามที่ดีได้อย่างไร .
DavidPostill

คำตอบ:


1

คุณกำลังมองหาGet-DhcpServerv4LeaseและRemove-DhcpServerv4Leasecmdlets อันดับแรกเราจะได้รับสัญญาเช่าปัจจุบันทั้งหมด:

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}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.