Delegando 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 representar, porque é necessário apenas um salto de rede. No entanto, se o script se conectar ao WMI no sistema remoto e fizer uma tentativa de abrir um arquivo de log em um sistema remoto adicional, o script falhará, a menos que o nível de representação seja Delegar. O nível de simulação de é necessário para qualquer operação que envolva mais de um salto de rede. Para obter mais informações sobre a segurança DCOM no WMI, consulte Definições de Segurança do Processo da Aplicação Cliente. Para obter mais informações sobre uma conexão de um único salto de rede entre dois computadores, consulte Ligar-se ao WMI num computador remoto.
Para usar a delegação para se conectar a um computador por meio de outro computador
Habilite a delegação no Ative Directory (Usuários e Computadores do Ative Directory no 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 é sensível 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 para Delegate.
-
VBScript
-
Defina o parâmetro impersonationLevel para Delegate na chamada para SWbemLocator.ConnectServer ou monikerDelegatena cadeia de caracteres. Você também pode definir a representação em um objeto SWbemSecurity .
-
C++
-
Defina o parâmetro do nível de personificaçã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 COM para um aplicativo WMI.
Para passar a identidade do cliente para servidores COM remotos em C++, defina o cloaking na chamada como CoSetProxyBlanket. Para obter mais informações, consulte Cloaking.
-
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 configurar a representação para 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