Conexão remota ao WMI com o PowerShell

O Windows PowerShell fornece um mecanismo simples para se conectar à WMI (Instrumentação de Gerenciamento do Windows) em um computador remoto. Conexões remotas no WMI são afetadas pelo Firewall do Windows, configurações de DCOM e o UAC (Controle de Conta de Usuário). Para obter mais informações sobre como configurar conexões remotas, confira Conectar-se ao WMI remotamente começando no Windows Vista.

Os exemplos neste tópico baseiam-se nos VBScripts de Conectar-se ao WMI em um computador remoto. Todos os exemplos neste tópico usam o cmdlet Get-WmiObject. Para obter mais informações, confira Get-WmiObject.

Exemplos do Windows PowerShell

Ao criar uma conexão com um computador remoto, um usuário pode especificar as informações de conexão, como o nome do computador remoto, as credenciais e o nível de autenticação para a conexão. Os exemplos a seguir ilustram como se conectar a um computador remoto usando diferentes conjuntos de credenciais e como acessar informações do WMI.

O seguinte exemplo do Windows PowerShell mostra a configuração do nível de representação:


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

No exemplo anterior, o usuário se conecta a um computador remoto usando as mesmas credenciais (domínio e nome de usuário) com as quais fez logon. O usuário também solicitou o uso da representação. Diferente do exemplo de VBScript original, uma cadeia de caracteres de moniker não é necessária, pois o nível de representação é definido pela propriedade "Impersonation". Por padrão, o nível de representação é definido como 3 (Representar).

O exemplo lista todas as instâncias da classe Win32_Process em execução no computador remoto.

Observação

Especifique o namespace do WMI ao qual se conectar no computador remoto, pois é possível que o namespace padrão não seja o mesmo em computadores diferentes.

 

O seguinte exemplo do Windows PowerShell mostra como se conectar a um computador remoto com credenciais diferentes e definir o nível de representação como 3, que é Representar:


$Computer = "atl-dc-01"

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

No exemplo anterior, o nome do computador foi atribuído à variável $Computer. O usuário se conecta a um computador remoto usando credenciais específicas (nome de usuário e domínio) e solicita representação para o nível de autenticação.

Observação

O caractere de acento grave (`) é usado para indicar uma quebra de linha. Ele é equivalente ao caractere de sublinhado (_) no VBScript.

 

O seguinte exemplo de código do Windows PowerShell se conecta a um grupo de computadores remotos no mesmo domínio criando uma matriz de nomes de computador remoto e exibindo nomes dos dispositivos Plug and Play – instâncias de Win32_PnPEntity – em cada computador:

$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
}

Observação

Para executar o script do Windows PowerShell anterior, você precisa ser administrador nos computadores remotos. Além disso, em relação ao exemplo anterior, observe o seguinte:

 

  • Os nomes de computador na matriz devem estar entre aspas porque são cadeias de caracteres.
  • Os objetos retornados por Get-WmiObject são atribuídos à variável $ColItems.
  • O operador de intervalo [] limitou a lista de dispositivos Plug and Play a 48 instâncias. Para saber mais, confira About_Operators.
  • O "|" é o caractere de pipeline. O objeto retornado por ColItems é enviado para o cmdlet Format-List.

O exemplo do Windows PowerShell a seguir permite que você se conecte a um computador remoto em um domínio diferente. Este exemplo também exibe os nomes de processo para instâncias de Win32_Process no computador 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
}

Observação

Para executar o script do Windows PowerShell anterior, você precisa ser administrador no computador remoto.

 

No exemplo anterior, o usuário se conecta a um computador remoto em um domínio diferente e especifica uma localidade preferencial. O comando Get-Credential solicita as credenciais do usuário e as atribui a um objeto. O exemplo também lista os nomes das instâncias da classe Win32_Process em execução no computador.

Conexão ao WMI em um computador remoto