Servidor DHCP do Windows - Script para remover concessões duplicadas para o mesmo nome de host

0

Estou procurando criar um script que elimine as concessões DHCP duplicadas do nosso servidor DHCP baseado no Windows Server 2008 R2. Descobri que você não pode fazer isso de forma nativa no PowerShell, mas pode usar o PowerShell para chamar um comando netsh.exe e manipular os dados.

Comando para listar todas as concessões de DHCP:

netsh dhcp server 10.100.2.241 scope 10.100.0.0 show clients 1

A saída resultante é um pouco confusa:

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----

Como exemplo, o host V2119 é listado duas vezes na saída com diferentes endereços IP e Lease Expiry times:

V2119 - 10.100.6.45 - 24/05/2016 23:24:43
V2119 - 10.100.5.167 - 24/05/2016 23:06:21

Neste exemplo, eu excluiria 10.100.5.167 já que ele expiraria antes e, portanto, é a concessão mais antiga e redundante.

Comando para excluir uma concessão específica por IP:

netsh dhcp server 10.100.2.241 scope 10.100.0.0 delete lease 10.100.5.167

Eu encontrei este artigo, em que o OP usa a saída do comando netsh no PowerShell e, em seguida, apara vários bits para retornar apenas uma lista de nomes de host e IPs. Embora o resultado não seja o que eu estou procurando, o corte pode ser útil. - link

Basicamente, eu preciso de um script para gerar todas as concessões no DHCP, descobrir quais nomes de host estão duplicados, depois daqueles duplicados que irão expirar antes e retornar o endereço IP e então canalizar isso para a netsh delete comando de locação acima.

Qualquer ajuda que você possa me dar sobre isso seria incrível e muito apreciada.

Dê-me um grito se precisar esclarecer alguma coisa.

    
por sixarm 21.07.2016 / 22:16

1 resposta

1

Você está procurando o Get-DhcpServerv4Lease e Remove-DhcpServerv4Lease cmdlets. Primeiro, vamos obter todas as concessões atuais:

Get-DhcpServerv4Lease |

Isso retorna várias instâncias de DhcpServerv4Lease . Vamos agrupá-los pelo nome do host:

group HostName |

O restante desses passos tem que ser feito em ForEach-Object , porque precisamos olhar dentro de cada grupo.

% { $_.Group |

Classificaremos o conteúdo de cada grupo pelo tempo de expiração decrescente, para que mais tarde cheguem mais cedo:

sort LeaseExpiryTime -Descending |

Queremos deixar o primeiro (mais recente) um só, por isso vamos ignorá-lo:

select -Skip 1 |

Finalmente, vamos deixar tudo de lado:

Remove-DhcpServerv4Lease }

Juntando tudo, recebemos este pequeno script:

Get-DhcpServerv4Lease | group HostName | % {$_.Group | sort LeaseExpiryTime -Descending | select -Skip 1 | Remove-DhcpServerv4Lease}
    
por 30.07.2016 / 17:29