Como TCP/IP es el protocolo de red más utilizado, la mayoría de las tareas básicas de administración de protocolos de red implican el uso de TCP/IP. En esta sección utilizamos Windows PowerShell y WMI para realizar estas tareas.

Crear una lista de direcciones IP utilizadas en un equipo

Para obtener todas las direcciones IP que se estén utilizando en el equipo local, utilice el comando siguiente:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress

El resultado de este comando es diferente de la mayoría de las listas de propiedades, ya que los valores se especifican entre llaves:

IPAddress

---------

{192.168.1.80}

{192.168.148.1}

{192.168.171.1}

{0.0.0.0}

Para entender por qué se usan llaves, utilice el cmdlet Get-Member para examinar la propiedad IPAddress:

PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress

TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter

Configuration

Name MemberType Definition

---- ---------- ----------

IPAddress Property System.String[] IPAddress {get;}

La propiedad IPAddress de cada adaptador de red es en realidad una matriz. Las llaves de la definición indican que IPAddress no es un valor System.String, sino una matriz de valores System.String.

Mostrar los datos de configuración de IP

Para mostrar los datos detallados de configuración de IP correspondientes a cada adaptador de red, utilice el comando siguiente:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .

De forma predeterminada, se muestra un conjunto muy reducido de la información disponible para el objeto de configuración de adaptadores de red. Si se desea una inspección más exhaustiva así como solución de problemas, utilice Select-Object o un cmdlet de formato, como Format-List, para especificar las propiedades que se han de mostrar.

Si no está interesado en las propiedades de IPX o WINS (lo que probablemente sea el caso de en una red TCP/IP moderna), puede utilizar el parámetro ExcludeProperty de Select-Object para ocultar las propiedades con nombres que comiencen por "WINS" o "IPX":

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*

Este comando devuelve información detallada acerca de DHCP, DNS, el enrutamiento y otras propiedades de configuración de IP menos importantes.

Hacer ping en equipos

Puede hacer un ping simple a un equipo usando Win32_PingStatus. El comando siguiente hace el ping, pero devuelve un resultado largo:

Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .

Un formato más útil para la información de resumen es una presentación de las propiedades Address, ResponseTime y StatusCode, como la que genera el comando siguiente. El parámetro Autosize de Format-Table cambia el tamaño de las columnas de la tabla para que se muestren correctamente en Windows PowerShell.

PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Format-Table -Property Address,ResponseTime,StatusCode -Autosize

Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0
A status code of 0 indicates a successful ping.

Puede utilizar una matriz para hacer ping a varios equipos con un único comando. Como hay más de una dirección, se ha de utilizar ForEach-Object para hacer ping a cada dirección de forma independiente:

"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

Puede usar el mismo formato de comando para hacer ping a todos los equipos de una subred, como en el caso de una red privada con el número de red 192.168.1.0 y de una máscara de subred estándar de clase C (255.255.255.0). Únicamente las direcciones entre 192.168.1.1 y 192.168.1.254 serán direcciones locales válidas (0 se reserva siempre para el número de red y 255 es una dirección de difusión de subred).

Puede representar una matriz de los números comprendidos entre 1 y 254 en Windows PowerShell utilizando la instrucción 1..254.. Se puede hacer un ping de subred completo si se genera la matriz y se agregan después los valores a una dirección parcial en la instrucción de ping:

1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

Observe que esta técnica para generar un intervalo de direcciones se puede usar también en otras partes. Puede generar un conjunto completo de direcciones de esta manera:

$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}

Recuperar propiedades de adaptadores de red

En una sección anterior de este manual del usuario, hemos mencionado que se pueden recuperar propiedades de configuración generales usando Win32_NetworkAdapterConfiguration. Aunque no se trata estrictamente de información de TCP/IP, la información relativa a los adaptadores de red, como las direcciones MAC y los tipos de adaptadores, puede resultar útil para entender lo que está pasando en un equipo. Para obtener un resumen de esta información, utilice el comando siguiente:

Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .

Asignar el dominio DNS para un adaptador de red

El método Win32_NetworkAdapterConfiguration SetDNSDomain se usa para asignar el dominio DNS para la resolución automática de nombres. Dado que se asigna el dominio DNS por separado para la configuración de cada adaptador de red, es necesario usar una instrucción ForEach-Object para asignar el dominio a cada adaptador:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_. SetDNSDomain("fabrikam.com") }

La instrucción de filtrado "IPEnabled=true" es necesaria porque, incluso en una red que usa solamente TCP/IP, varias de las configuraciones de adaptadores de red que hay en un equipo no son adaptadores TCP/IP reales; se trata de elementos de software generales que admiten RAS, PPTP, QoS y otros servicios para todos los adaptadores y, por tanto, no tienen una dirección propia.

Puede filtrar el comando con el cmdlet Where-Object, en lugar de usar el filtro Get-WmiObject.

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.SetDNSDomain("fabrikam.com")}

Realizar tareas de configuración de DHCP

La modificación de la información de DHCP conlleva trabajar con un conjunto de adaptadores de red, como en la configuración de DNS. Se pueden realizar varias acciones diferenciadas usando WMI; recorreremos paso a paso algunas de las más comunes.

Determinar los adaptadores con DHCP habilitado

Para buscar los adaptadores con DHCP habilitado en un equipo puede usar el comando siguiente:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .

Para excluir los adaptadores con problemas de configuración de IP, puede recuperar solamente los adaptadores con IP habilitado:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .

Recuperar propiedades de DHCP

Como las propiedades relacionadas con DHCP de un adaptador comienzan generalmente por "DHCP", puede utilizar el parámetro Property de Format-Table para mostrar sólo esas propiedades:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Format-Table -Property DHCP*

Habilitar DHCP en cada adaptador

Para habilitar DHCP en todos los adaptadores puede usar el comando siguiente:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}

Puede utilizar la instrucción Filter "IPEnabled=true and DHCPEnabled=false" para evitar habilitar DHCP donde ya está habilitado, pero la omisión de este paso no producirá ningún error.

Liberar y renovar concesiones DHCP en adaptadores específicos

La clase Win32_NetworkAdapterConfiguration tiene los métodos RenewDHCPLease y ReleaseDHCPLease. Ambos se utilizan del mismo modo. En general, estos métodos se usan si solo es necesario liberar o renovar direcciones para un adaptador en una subred específica. La manera más sencilla de filtrar los adaptadores en una subred es seleccionar únicamente las configuraciones de adaptadores que utilicen la puerta de enlace de esa subred. Por ejemplo, el comando siguiente libera todas las concesiones DHCP en adaptadores del equipo local que obtengan estas concesiones a partir de 192.168.1.254:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}

El único cambio para renovar concesiones DHCP es utilizar el método RenewDHCPLease en lugar del método ReleaseDHCPLease:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
Nota:

Cuando se utilizan estos métodos en un equipo remoto, hay que tener en cuenta que se puede perder el acceso al sistema remoto si se está conectado al mismo a través del adaptador con la concesión liberada o renovada.

Liberar y renovar concesiones DHCP en todos los adaptadores

Puede liberar o renovar direcciones DHCP globalmente en todos los adaptadores usando los métodos Win32_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll y RenewDHCPLeaseAll. No obstante, es necesario aplicar el comando a la clase de WMI, y no a un adaptador concreto, ya que la liberación y la renovación global de concesiones se realizan en la clase, no en un adaptador concreto.

Puede obtener una referencia a una clase de WMI, y no a instancias de la clase, si crea una lista de todas las clases de WMI y, a continuación, selecciona solo la clase que desea por su nombre. Por ejemplo, el comando siguiente devuelve la clase Win32_NetworkAdapterConfiguration:

Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}

Puede tratar el comando completo como la clase y, a continuación, llamar al método ReleaseDHCPAdapterLease incluido. En el comando siguiente, los elementos de canalización Where-Object y Get-WmiObject se especifican entre paréntesis, lo que indica a Windows PowerShell que se han de evaluar primero:

( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).ReleaseDHCPLeaseAll()

Puede utilizar el mismo formato de comando para llamar al método RenewDHCPLeaseAll:

( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).RenewDHCPLeaseAll()

Crear un recurso compartido de red

Para crear un recurso compartido de red, use el método Win32_Share Create:

(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).Create("C:\temp","TempShare",0,25,"test share of the temp folder")

También puede crear el recurso compartido usando net share en Windows PowerShell:

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

Eliminar un recurso compartido de red

Puede quitar un recurso compartido de red con Win32_Share, pero el proceso es ligeramente diferente del que se usa para crear un recurso compartido, porque es necesario recuperar el recurso compartido específico que se desea quitar, en lugar de la clase Win32_Share. La instrucción siguiente elimina el recurso compartido "TempShare":

 (Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").Delete()

También se puede utilizar Net share:

PS> net share tempshare /delete
tempshare was deleted successfully.

Conectar una unidad de red accesible desde Windows

Los cmdlets New-PSDrive crean unidades de Windows PowerShell, pero las unidades creadas de esta manera están disponibles únicamente en Windows PowerShell. Para crear una unidad en red, puede usar el objeto COM WScript.Network. El siguiente comando asigna el recurso compartido \\FPS01\users a la unidad local B:

(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")

También se puede utilizar el comando net use:

net use B: \\FPS01\users

Las unidades asignadas con WScript.Network o con net use están disponibles inmediatamente en Windows PowerShell.




Tabla de contenido