Delegar com WMI
Quando você executa um script em um sistema local que obtém dados de um sistema remoto, o WMI fornece suas credenciais ao provedor dos dados no sistema remoto. Isso requer apenas um nível de representação de Personificar, pois apenas um salto de rede é necessário. No entanto, se o script se conectar ao WMI no sistema remoto e tentar abrir um arquivo de log em um sistema remoto adicional, o script falhará, a menos que o nível de representação seja Delegado. O nível de representação de delegado é exigido por qualquer operação que envolva mais de um salto de rede. Para obter mais informações sobre a segurança DCOM no WMI, consulte Configurando a segurança do processo do aplicativo cliente. Para obter mais informações sobre uma conexão de salto de rede entre dois computadores, consulte Conectando-se ao WMI em um computador remoto.
Para usar a delegação para se conectar a um computador por meio de outro computador
Habilite a delegação no Active Directory (Usuários e Computadores do Active Directory em Painel de controle Tarefas Administrativas) no controlador de domínio. A conta no sistema remoto deve ser marcada como Confiável para delegação e a conta no sistema local não deve ser marcada como A conta é confidencial e não pode ser delegada. O sistema local, o sistema remoto e o controlador de domínio devem ser membros do mesmo domínio ou em domínios confiáveis.
Observação O uso da delegação é um risco de segurança porque dá aos processos fora do seu controle direto a capacidade de usar suas credenciais.
Modifique seu código da seguinte maneira para indicar que você deseja usar a delegação.
-
PowerShell
-
Defina o parâmetro -Impersonation no cmdlet WMI como Delegate.
-
VBScript
-
Defina o parâmetro impersonationLevel como Delegate na chamada para SWbemLocator.ConnectServer ou Delegatena cadeia de caracteres de moniker . Você também pode definir a representação em um objeto SWbemSecurity.
-
C++
-
Defina o parâmetro de nível de representação como RPC_C_IMP_LEVEL_DELEGATE na chamada para CoInitializeSecurity ou CoSetProxyBlanket. Para obter mais informações sobre quando fazer essas chamadas, consulte Inicializando o COM para um aplicativo WMI.
Para passar a identidade do cliente para servidores COM remotos em C++, defina a camuflagem na chamada para CoSetProxyBlanket. Para obter mais informações, consulte Camuflagem.
-
Exemplos
O exemplo de código a seguir mostra uma cadeia de caracteres de moniker que define a representação como Delegate. Lembre-se de que a autoridade deve ser definida como Kerberos.
set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")
O exemplo de código a seguir mostra como definir a representação como Delegate (um valor de 4) usando SWbemLocator.ConnectServer.
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(Computer_B, _
"Root\CIMv2", _
AdminAccount, _
MyPassword, _
"kerberos:Domain\Computer_B")
objWMIService.Security_.ImpersonationLevel = 4
Tópicos relacionados