Powershell Snippets: Obtener la MAC de la tarjeta WIFI de equipos en el AD

Hola a todos,

En ocasiones, hace falta obtener información específica sobre equipos del dominio. Por ejemplo, supongamos que por motivos estadísticos, es necesario sacar un listado de los equipos de una oficina que están encendidos en un momento determinado, y no sólo eso, sino que además se desea obtener la MAC de su interfaz Wi-Fi (para complicar el asunto).

En este caso, está claro que se va a utilizar el módulo de Active Directory de PowerShell, ya que hace falta obtener un listado de equipos. Y por otro lado, es necesario que haya un mecanismo que permita conectarse a las máquinas para acceder a la lista de interfaces de red, y poder leer las que nos interesen.

Afortunadamente, PowerShell dispone de todo lo necesario para llevar a cabo esta tarea. A continuación, un breve desglose con los cmdlets principales:

  • Get-ADComputer -Filter * -SearchBase “OU=Oficina,OU=Empresa,DC=Empresa,DC=com”
    Este cmdlet va a encargarse de obtener todos los equipos del dominio. Además, se especifica
  • get-wmiobject -class “Win32_NetworkAdapter” -computername $comp.DNSHostName -filter “NetConnectionID = ‘Wi-Fi’ ” -ErrorAction “Stop”
    Con este cmdlet se lanza una consulta WMI a los equipos obtenidos previamente, y se le aplica un filtro por el campo “Wi-Fi”. También se puede filtrar por “Ethernet”, o no filtrar en absoluto.
  • New-Object PSObject -prop @{Computer = $comp.DNSHostName; Adapter = $obj.Name; MAC=$obj.MACAddress}
    El último comando importante genera un objeto con los atributos “Computer”, “Adapter” y “MAC”, que se utiliza para crear un archivo CSV al final del script.

Hay una poderosa razón para que este script deba lanzarse desde la PowerShell de un usuario Administrador de Dominio: Se conecta a cada una de las máquinas para consultar su lista de interfaces y quedarnos con aquellas que tienen interfaz Wi-Fi. Si quien lo ejecuta no es administrador de dominio, no va a poder conectar con las máquinas, y por tanto, no podrá generar el listado.

Sin más dilación, aquí tenéis el código de la función.

Se puede pegar tal y como está en una consola de PowerShell e invocarla como un cmdlet cualquiera, o se puede integrar dentro de un módulo, o generar un script (copiando únicamente el código de la función). Las posibilidades son infinitas, sobre todo gracias a que se puede jugar con el cmdlet get-wmiObject para obtener una variedad de información casi ilimitada.

shell

Finalmente, y como un artículo sobre un script nunca queda completo si no incluye capturas de pantalla… aquí está una muestra del CSV resultado de la ejecución del script.

wifiMac

 

Happy Scripting!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *