jueves, 3 de mayo de 2012

Concesiones DHCP con Netsh y PowerShell


¿Cuales son los hosts cuyas direcciones ip son asignadas de forma dinámica por un servidor DHCP de Windows?

Para conocer esta información normalmente consultas las concesiones de direcciones del servicio DHCP mediante su consola de administración.

Si necesitas la información anterior en otro formato para utilizarla después, la consola de administración de DHCP te permite realizar una exportación a un fichero de texto, pero ¿existe alguna manera automática de conseguir esta información? El comando netsh también puede mostrar esa información, como en el siguiente ejemplo (la ip del servidor DHCP es 192.168.1.100 y el ámbito consultado es 192.168.0.0):

netsh dhcp server 192.168.1.100 v4 scope 192.168.0.0 show clientsvq


Si redireccionas la salida del comando anterior a un fichero de texto ya tendrías un listado que puede servir de informe, pero si quieres un informe personalizado o automatizar otras tareas con esta información, es necesario extraer cada ip, mac y nombre de cada host del listado.

Para ello, puedes utilizar la salida del comando anterior en un script de PowerShell de la siguiente forma:


$clientes = netsh dhcp server 192.168.1.100 v4 scope 192.168.0.0 show clientsvq

foreach ($cliente in $clientes)
{
  if ($cliente -match "^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}")
  {
    $cliente -match "^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s{1,}-\s\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}\s{1,}-(\w\w-\w\w-\w\w-\w\w-\w\w-\w\w).*-[D|U|N]\s-(.*?)\s-"

    $ip     = $Matches[1]
    $mac    = $Matches[2] -replace "-",""
    $nombre = $Matches[3]

    write-host "$ip - $mac - $nombre"
  }
}


Y ya tendrías la ip, la mac y el nombre de cada host disponibles para lo que quieras.



1 comentario:

Unknown dijo...

Buenisimoooo, buen aporte amigo