Я смотрю на создание сценария, который очищает дубликаты аренды 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 выше. ,

Любая помощь, которую вы можете оказать мне в этом, была бы удивительной и очень ценилась.

Дайте мне крик, если вам нужно что-то прояснить.

1 ответ1

1

Вы ищете командлеты Get-DhcpServerv4Lease и Remove-DhcpServerv4Lease . Сначала мы получим все текущие договоры аренды:

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}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .