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: