Realizar tareas de redes

Este ejemplo solo se aplica a las plataformas Windows.

Dado que TCP/IP es el protocolo de red más usado, la mayoría de las tareas de administración de protocolo de red de bajo nivel implican TCP/IP. En esta sección, se usan PowerShell y WMI para realizar estas tareas.

Enumeración de las direcciones IP de un equipo

Para obtener todas las direcciones IP en uso en el equipo local, use el siguiente comando:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

Puesto que la propiedad IPAddress de un objeto Win32_NetworkAdapterConfiguration es una matriz, debe usar el parámetro ExpandProperty de Select-Object para ver toda la lista de direcciones.

10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1

Con el cmdlet Get-Member puede ver que la propiedad IPAddress es una matriz:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Get-Member -Name IPAddress
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   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.

Enumeración de datos de configuración IP

Para mostrar datos detallados de configuración de IP de cada adaptador de red, use el siguiente comando:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

La visualización predeterminada del objeto de configuración del adaptador de red es un conjunto muy reducido de datos disponibles. Para la inspección en profundidad y la solución de problemas, use Select-Object o un cmdlet de formato, como Format-List, para especificar las propiedades que se mostrarán.

En redes TCP/IP modernas, probablemente no le interesan las propiedades IPX o WINS. Puede usar el parámetro ExcludeProperty de Select-Object para ocultar las propiedades con nombres que comienzan por "WINS" o "IPX".

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExcludeProperty IPX*,WINS*

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

Hacer ping a los equipos

Puede hacer ping simplemente en un equipo mediante Win32_PingStatus. El comando siguiente hace ping, pero devuelve una salida larga:

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

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

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
    Format-Table -Property Address,ResponseTime,StatusCode -Autosize
Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0

Un StatusCode de 0 indica un ping correcto.

Puede usar una matriz para hacer ping a varios equipos con un solo comando. Dado que hay más de una dirección, use ForEach-Object para hacer ping a cada dirección por separado:

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

Puede usar el mismo formato de comando para hacer ping a todas las direcciones de una subred, como una red privada que use el número de red 192.168.1.0 y una máscara de subred de clase C estándar (255.255.255.0). Solo las direcciones del intervalo de 192.168.1.1 a 192.168.1.254 son direcciones locales legítimas (0 se reserva siempre al número de red y 255 es una dirección de difusión de subred).

Para representar una matriz de los números del 1 al 254 en PowerShell, use la expresión 1..254. Para hacer ping a una subred completa, se puede agregar cada valor del rango a una dirección parcial de la instrucción ping:

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

Tenga en cuenta que esta técnica para generar un intervalo de direcciones puede usarse también en otras ubicaciones. Puede generar un conjunto completo de direcciones de esta manera:

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

Recuperación de las propiedades del adaptador de red

Anteriormente, mencionamos que podía recuperar las propiedades de configuración general mediante la clase Win32_NetworkAdapterConfiguration. Aunque no sea estrictamente información de TCP/IP, la información del adaptador de red, como las direcciones MAC y los tipos de adaptador, puede ser útil para comprender lo que ocurre con un equipo. Para obtener un resumen de esta información, use el siguiente comando:

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

Asignación del dominio DNS de un adaptador de red

Para asignar el dominio DNS para la resolución de nombres automática, use el método SetDNSDomain de Win32_NetworkAdapterConfiguration. El parámetro Query de Invoke-CimMethod toma una cadena de consulta de WQL. El cmdlet llama al método especificado en cada instancia devuelta por la consulta.

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

El filtrado por IPEnabled=True es necesario, porque incluso en una red que usa solo TCP/IP, varias de las configuraciones del adaptador de red de un equipo no son verdaderos adaptadores TCP/IP. Son elementos de software generales que admiten RAS, VPN, QoS y otros servicios para todos los adaptadores y, por tanto, no tienen una dirección propia.

Realización de tareas de configuración de DHCP

La modificación de detalles de DHCP implica trabajar con un conjunto de adaptadores de red, igual que en la configuración de DNS. Hay varias acciones distintas que puede realizar mediante WMI.

Búsqueda de adaptadores habilitados para DHCP

Para buscar los adaptadores con DHCP habilitado en un equipo, use el siguiente comando:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

Para excluir los adaptadores con problemas de configuración de IP, puede recuperar solo los adaptadores con IP habilitada:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

Recuperación de propiedades de DHCP

Dado que las propiedades relacionadas con DHCP de un adaptador suelen empezar por DHCP, puede usar el parámetro Property de Format-Table para mostrar solo esas propiedades:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

Habilitación de DHCP en cada adaptador

Para habilitar DHCP en todos los adaptadores, use el siguiente comando:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

El uso de la instrucción de filtrado IPEnabled=True and DHCPEnabled=False evita habilitar DHCP cuando ya está habilitado.

Liberación y renovación de las concesiones DHCP en adaptadores específicos

Las instancias de la clase Win32_NetworkAdapterConfiguration tienen métodos ReleaseDHCPLease y RenewDHCPLease. Ambos se usan de la misma manera. En general, use estos métodos si solo necesita liberar o renovar direcciones de un adaptador en una subred específica. La manera más fácil de filtrar adaptadores en una subred es elegir solo las configuraciones de adaptador que usen la puerta de enlace para esa subred. Por ejemplo, el comando siguiente libera todas las concesiones DHCP de los adaptadores en el equipo local que obtienen concesiones DHCP de 192.168.1.254:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

El único cambio en la renovación de una concesión DHCP es que se usa el método RenewDHCPLease en lugar de ReleaseDHCPLease:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

Nota

Al usar estos métodos en un equipo remoto, tenga en cuenta que puede perder el acceso al sistema remoto si está conectados a este a través del adaptador con la concesión liberada o renovada.

Liberación y renovación de las concesiones DHCP en todos los adaptadores

Puede realizar liberaciones o renovaciones de direcciones DHCP globales en todos los adaptadores mediante los métodos de Win32_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll y RenewDHCPLeaseAll. Sin embargo, el comando se debe aplicar a la clase WMI, en lugar de a un adaptador determinado, porque liberar y renovar concesiones globalmente se realiza en la clase, no en un adaptador específico. El cmdlet Invoke-CimMethod puede llamar a los métodos de una clase.

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

Puede usar el mismo formato de comando para invocar el método RenewDHCPLeaseAll:

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

Creación de un recurso compartido de red

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

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
    Path = 'C:\temp'
    Name = 'TempShare'
    Type = [uint32]0 #Disk Drive
    MaximumAllowed = [uint32]25
    Description = 'test share of the temp folder'
}

Es equivalente al siguiente comando net share en Windows:

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

Para llamar a un método de una clase WMI que toma parámetros, debe saber qué parámetros hay disponibles y sus tipos. Por ejemplo, puede enumerar los métodos de Win32_Class con los siguientes comandos:

(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name          ReturnType Parameters                                   Qualifiers
----          ---------- ----------                                   ----------
Create            UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo      UInt32 {Access, Description, MaximumAllowed}        {Implemented, MappingStrings}
GetAccessMask     UInt32 {}                                           {Implemented, MappingStrings}
Delete            UInt32 {}                                           {Destructor, Implemented, MappingStrings}

Use el comando siguiente para enumerar los parámetros del método Create.

(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name            CimType Qualifiers                                  ReferenceClassName
----            ------- ----------                                  ------------------
Access         Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description      String {ID, In, MappingStrings, Optional}
MaximumAllowed   UInt32 {ID, In, MappingStrings, Optional}
Name             String {ID, In, MappingStrings}
Password         String {ID, In, MappingStrings, Optional}
Path             String {ID, In, MappingStrings}
Type             UInt32 {ID, In, MappingStrings}

También puede leer la documentación del método Create de la clase Win32_Share.

Eliminación de un recurso compartido de red

Puede quitar un recurso compartido de red con Win32_Share, pero el proceso es ligeramente diferente al de creación, porque debe recuperar la instancia específica que se va a quitar en lugar de la clase Win32_Share. En el ejemplo siguiente se elimina el recurso compartido TempShare:

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

Conexión a una unidad de red accesible de Windows

El cmdlet New-PSDrive puede crear una unidad de PowerShell que esté asignada a un recurso compartido de red.

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Sin embargo, las unidades creadas de esta forma solo están disponibles para la sesión de PowerShell donde se crean. Para asignar una unidad que esté disponible fuera de PowerShell (o a otras sesiones de PowerShell), debe usar el parámetro Persist.

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Nota

Es posible que las unidades asignadas de forma permanente no estén disponibles cuando se ejecutan en un contexto con privilegios elevados. Este es el comportamiento predeterminado de UAC de Windows. Para obtener más información, consulte el artículo siguiente: