Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O WMI pode ser usado para gerenciar e acessar dados WMI em computadores remotos. As conexões remotas no WMI são afetadas pelo Firewall do Windows e pelas configurações DCOM e. O Controle de Conta de Usuário (UAC) também pode exigir alterações em algumas configurações. No entanto, uma vez que você tenha suas configurações corretas, a chamada para um sistema remoto é muito semelhante a uma chamada WMI local. No entanto, você pode optar por torná-lo mais complexo, usando credenciais diferentes, protocolos de autenticação alternativos e outros recursos de segurança.
Configurando um computador para uma conexão remota
Antes de poder aceder a um sistema remoto com WMI, poderá ter de verificar algumas definições de segurança para confirmar que tem acesso. Mais especificamente:
O Windows contém vários recursos de segurança que podem bloquear o acesso a scripts em sistemas remotos. Como tal, talvez seja necessário modificar as configurações do Ative Directory e do Firewall do Windows do seu sistema antes de fazer uma chamada WMI. Para obter mais informações, consulte Configuração de uma conexão WMI remota e Solução de problemas de uma conexão WMI remota.
As configurações DCOM corretas devem estar habilitadas para que uma conexão remota funcione. Alterar as configurações de DCOM pode permitir que usuários com direitos baixos acessem um computador para uma conexão remota. Para obter mais informações, consulte Protegendo uma conexão WMI remota.
Além disso, pode haver algumas circunstâncias em que você pode querer executar o WMI através de uma porta fixa. Para fazer isso, você também precisará alterar suas configurações. Para obter mais informações, consulte Configurando uma porta fixa para WMI.
Ligar a um computador remoto
Em sua essência, conectar-se a um sistema remoto com WMI consiste em certificar-se de que você tem as permissões apropriadas para acessar o sistema e que sua conexão está configurada corretamente. Uma vez que você tenha esses dois elementos, a conexão em si é relativamente simples. Por exemplo, se você estiver usando suas credenciais de segurança padrão, poderá acessar o WMI em um sistema remoto usando o seguinte código:
-
Use o parâmetro -ComputerName comum à maioria dos cmdlets WMI, como Get-WmiObject.
$strComputer = "Computer_B" $colSettings = Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer -
Use um moniker que contenha o nome do sistema remoto na chamada para GetObject.
strComputer = "Computer_B" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") -
Para a versão atual da interface gerenciada WMI (Microsoft.Management.Infrastructure), use o objeto CimSession para representar uma conexão com um host remoto.
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string OSQuery = "SELECT * FROM Win32_OperatingSystem"; CimSession mySession = CimSession.Create("Computer_B"); IEnumerable<CimInstance> queryInstance = mySession.QueryInstances(Namespace, "WQL", OSQuery); -
Para a versão v1 da interface gerenciada WMI (System.Management), use o objeto ManagementScope para representar uma conexão com um host remoto.
using System.Management; ... ManagementScope scope = new ManagementScope("\\\\Computer_B\\root\\cimv2"); scope.Connect(); ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); -
Use o método IWbemLocator::ConnectServer para especificar o nome do computador remoto no parâmetro strNetworkResource.
hres = pLoc->ConnectServer( _bstr_t(L"\\\\COMPUTER_B\\root\\cimv2"), _bstr_t(useToken?NULL:pszName), // User name _bstr_t(useToken?NULL:pszPwd), // User password NULL, // Locale NULL, // Security flags _bstr_t(useNTLM?NULL:pszAuthority),// Authority NULL, // Context object &pSvc // IWbemServices proxy );
Os exemplos de código anteriores são indiscutivelmente a conexão remota mais básica que você pode executar com o WMI. Especificamente, os exemplos assumem o seguinte:
- Você é um administrador na máquina remota. Devido ao Controle de Conta de Usuário, a conta no sistema remoto deve ser uma conta de domínio no grupo Administradores. Para obter mais informações, consulte Controle de conta de usuário e WMI.
- A senha na sua máquina local atual não está em branco. Este é essencialmente um requisito de segurança do Windows que você deve ter conectado ao seu sistema com uma senha.
- Os computadores locais e remotos estão dentro do mesmo domínio. Se você precisar cruzar os limites do domínio, precisará fornecer informações adicionais ou usar um modelo de programação ligeiramente diferente.
- Você está usando sua própria conta para acessar a máquina remota. Se você estivesse tentando acessar uma conta diferente, precisaria fornecer credenciais adicionais. (Observe que tentar acessar o WMI localmente com credenciais diferentes da sua conta atual não é permitido.)
- Ambos os computadores estão executando IPv6. O WMI suporta conexões com computadores que executam IPv6. No entanto, tanto a máquina local quanto o "Computer_B" devem estar executando IPv6. Qualquer computador pode estar executando IPv4 também. Para obter mais informações, consulte Suporte a IPv6 e IPv4 no WMI.
- Seu script não precisa delegar - ou seja, ele não precisa acessar computadores remotos adicionais através do computador remoto de destino. Para obter mais informações, consulte Delegando com WMI.
- Você está tentando fazer uma chamada específica, em vez de criar um processo remoto. Para obter mais informações, consulte Criando processos remotamente usando WMI.
Com essas restrições em mente, uma chamada WMI remota é muito semelhante a uma chamada WMI local - a única diferença é que você deve especificar o nome do sistema remoto. No entanto, pode alterar muitas dessas funcionalidades: utilizando credenciais diferentes, ou encaminhando a sua chamada através de um computador de terceiros, ou acedendo a um domínio diferente.