Saltar al contenido

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

Logo tips powershell

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.

Te recomendamos leer:

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (2)

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 \\homenfsSoporte00DHCP_Distribución-LimpiezaEquipos_IP_FijaScrip.ps1:14 char:16
+ ... $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -Computer ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

Responder

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.

Responder
Compartir
Twittear
Compartir
Pin