PowerShell – Script para saber que computadoras tienen IP fija y dinámica en la red

Surgió la necesidad de obtener que computadoras tienen IP fija y dinámica en nuestra red de trabajo, el cual ir a cada equipo presentaría una labor innecesaria teniendo como opción realizarlo remoto mediante un Script PowerShell.

Script Powershell

[cmdletbinding()]
param (
 [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
 [string[]]$ComputerName = $env:computername
) 

begin {}
process {
 foreach ($Computer in $ComputerName) {
 if(Test-Connection -ComputerName $Computer -Count 1 -ea 0) {
 $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $Computer | ? {$_.IPEnabled}
 foreach ($Network in $Networks) {
 $IPAddress = $Network.IpAddress[0]
 $SubnetMask = $Network.IPSubnet[0]
 $DefaultGateway = $Network.DefaultIPGateway
 $DNSServers = $Network.DNSServerSearchOrder
 $IsDHCPEnabled = $false
 If($network.DHCPEnabled) {
 $IsDHCPEnabled = $true
 }
 $MACAddress = $Network.MACAddress
 $OutputObj = New-Object -Type PSObject
 $OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.ToUpper()
 $OutputObj | Add-Member -MemberType NoteProperty -Name IPAddress -Value $IPAddress
 $OutputObj | Add-Member -MemberType NoteProperty -Name SubnetMask -Value $SubnetMask
 $OutputObj | Add-Member -MemberType NoteProperty -Name Gateway -Value ($DefaultGateway -join ",")
 $OutputObj | Add-Member -MemberType NoteProperty -Name IsDHCPEnabled -Value $IsDHCPEnabled
 $OutputObj | Add-Member -MemberType NoteProperty -Name DNSServers -Value ($DNSServers -join ",")
 $OutputObj | Add-Member -MemberType NoteProperty -Name MACAddress -Value $MACAddress
 $OutputObj
 }
 }
 elseif (!(Test-Connection -ComputerName $Computer -Count 1 -Quiet)) { 
 Write-Host "$computerName not on network."
 Continue # Move to next computer
 }
 }
} 
end {}

 Instrucciones de Uso

  • Para hacer uso de Powershell debemos tener instalado Windows Management Framework.
  • Copiamos el script anterior, lo pegamos en un notepad y lo guardamos con extensión NombreArchivo.ps1.
  • Ahora crearemos el listado en un archivo TXT (notepad) de todos los equipos de nuestra red o de los equipos que deseamos obtener la información, el archivo debe contener los nombres de los equipos como se muestra en la imagen y guardamos este  [Ver como crear inventario de red automático].
    Ejemplo inventario
    Ejemplo inventario
  • Una vez creados guardamos los archivos en una carpeta de fácil acceso por medio de comando por ejemplo alguna carpeta en el C:\ en mi caso tengo una carpeta en el C:\  llamada Scripts.
  • Ahora abrimos Powershell donde ejecutaremos el script con el siguiente comando [Posible error al ejecutar ver aquí como solucionarlo]:
get-Content C:\NombreArchivoListaPCs.txt | C:\Scripts\NombreArchivoScript.ps1
  • Si lo queremos exportar a un documento Excel ejecutamos la siguiente linea:
get-Content C:\NombreArchivoListaPCs.txt | C:\Scripts\NombreArchivoScript.ps1 | Export-csv C:\Equipos_IP_FIJA_DINAMICA.csv -notype
  • El cual nos dara la siguiente información.
    Archivo exportado ejemplo
    Archivo exportado ejemplo
  • Donde la columna que nos interesa en este momento es “IsDHCPEnabled” el cual:
    • False = IP Fija
    • True = IP Dinámica
  • En este momento ya hemos obtenido que equipos tienen IP fija y Dinámica.

Califica este articulo

Fernando O.

Soy analista de sistemas actualmente trabajo en una empresa con mas de 200 empleados que utilizan equipo de computo al cual se les da soporte en el departamento.
Uno de mis pasatiempos fuera de la empresa es escribir artículos para PortalMasTips donde documento los problemas, inquietudes y detalles interesantes que se presentan.

2 comentarios en “PowerShell – Script para saber que computadoras tienen IP fija y dinámica en la red

  1. Excelente Fernando muy Bueno.

    Una pregunta> Se puede modificar la instruccion para que cuando no encuentre un equipo, indique la IP/Nombre de este equipo.

    Al momento cuando no encuentra un equipo me dice:

    Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
    At \\homenfs\Soporte00\DHCP_Distribución-Limpieza\Equipos_IP_Fija\Scrip.ps1:14 char:16
    + ... $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -Computer ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
        + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
    • Buen dia Antony

      Agregue al código la instrucción después del del IF para que agregue NombreDePC not on network. en la respuesta

      elseif (!(Test-Connection -ComputerName $Computer -Count 1 -Quiet)) { 
        Write-Host "$computerName not on network."
        Continue # Move to next computer
         }

      Saludos.

Deja un comentario...

Compartir
Twittear
+1
Compartir
Pin
Stumble