Conexión a WMI de forma remota con PowerShell

Windows PowerShell proporciona un mecanismo sencillo para conectarse a Instrumental de administración de Windows (WMI) en un equipo remoto. Las conexiones remotas en WMI se ven afectadas por el Firewall de Windows, la configuración de DCOM y el Control de cuentas de usuario (UAC). Para más información sobre la configuración de conexiones remotas, consulte el tema sobre conexión remota a WMI a partir de Windows Vista.

Los ejemplos de este tema se basan en los VBScripts de Conexión a WMI en un equipo remoto. Todos los ejemplos de este tema usan el cmdlet Get-WmiObject. Para más información, consulte Get-WmiObject.

Ejemplos de Windows PowerShell

Al crear una conexión a un equipo remoto, un usuario puede especificar la información de conexión, como el nombre del equipo remoto, las credenciales y el nivel de autenticación de la conexión. En los ejemplos siguientes se muestra cómo conectarse a un equipo remoto mediante diferentes conjuntos de credenciales y cómo acceder a la información de WMI.

En el ejemplo siguiente de Windows PowerShell se muestra cómo establecer el nivel de suplantación:


Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process -Impersonation 3 -ComputerName Computer_B

En el ejemplo anterior, el usuario se conecta a un equipo remoto con las mismas credenciales (dominio y nombre de usuario) con las que inició sesión. El usuario también ha solicitado usar la suplantación. A diferencia del ejemplo original de VBScript, no se necesita una cadena de moniker porque el nivel de suplantación se establece mediante la propiedad "Impersonation". De forma predeterminada, el nivel de suplantación se establece en 3 (Suplantar).

En el ejemplo se enumeran todas las instancias de la clase Win32_Process que se ejecutan en el equipo remoto.

Nota

Debe especificar el espacio de nombres de WMI al que quiere conectarse en el equipo remoto porque es posible que el espacio de nombres predeterminado no sea el mismo en distintos equipos.

 

En el ejemplo siguiente de Windows PowerShell se muestra cómo conectarse a un equipo remoto con diferentes credenciales y establecer el nivel de suplantación en 3, que es Suplantar:


$Computer = "atl-dc-01"

Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process -Impersonation 3 -Credential `
FABRIKAM\administrator -ComputerName $Computer

En el ejemplo anterior, el nombre del equipo se ha asignado a la variable $Computer. El usuario se conecta a un equipo remoto mediante credenciales específicas (dominio y nombre de usuario) y solicita una suplantación para el nivel de autenticación.

Nota

El carácter de acento grave (`) se usa para indicar un salto de línea. Es equivalente al carácter de subrayado (_) en VBScript.

 

El siguiente ejemplo de código de Windows PowerShell se conecta a un grupo de equipos remotos del mismo dominio mediante la creación de una matriz de nombres de equipos remotos y, a continuación, se muestran los nombres de los dispositivos Plug and Play (instancias de Win32_PnPEntity) en cada equipo:

$ArrComputers = "Computer1", "Computer2", "Computer3"
foreach ($Computer in $ArrComputers) 
{
write-host ""
write-host "===================================="
write-host "Computer: $Computer"
write-host "===================================="

write-host "-----------------------------------"
write-host "Win32_PnPEntity instance"
write-host "-----------------------------------"

$ColItems = Get-WmiObject -Class Win32_PnPEntity -Namespace "root\cimv2" -Computer $Computer
$ColItems[0..47] | Format-List Name, Status
}

Nota

Para ejecutar el script de Windows PowerShell anterior, debe ser administrador en los equipos remotos. Además, en relación con el ejemplo anterior, tenga en cuenta lo siguiente:

 

  • Los nombres de equipo de la matriz deben ir entre comillas porque son cadenas.
  • Los objetos devueltos por Get-WmiObject se asignan a la variable $ColItems.
  • El operador de intervalo [] ha limitado la lista de dispositivos de Plug and Play a 48 instancias. Para más información, consulte About_Operators.
  • "|" es el carácter de canalización. El objeto devuelto por ColItems se envía al cmdlet Format-List.

El siguiente ejemplo de Windows PowerShell permite conectarse a un equipo remoto en un dominio diferente. En este ejemplo también se muestran los nombres de proceso de las instancias de Win32_Process en el equipo remoto.

$Computer = "FullComputerName" 
$Domain = "DOMAIN"
$Credential = Get-Credential
$ColItems = Get-WmiObject -Class Win32_Process -Authority "ntlmdomain:$Domain" `
-Credential $Credential -Locale "MS_409" -Namespace "root\cimv2"  -ComputerName $Computer

foreach ($ObjItem in $colItems) 
{
write-host "Process Name:" $ObjItem.name
}

Nota

Para ejecutar el script de Windows PowerShell anterior, debe ser administrador en el equipo remoto.

 

En el ejemplo anterior, el usuario se conecta a un equipo remoto en un dominio diferente y especifica una configuración regional preferida. El comando Get-Credential solicita las credenciales del usuario y asigna las credenciales a un objeto. En el ejemplo también se enumeran los nombres de las instancias de la clase Win32_Process que se ejecutan en el equipo.

Conexión a WMI en un equipo remoto