Delegar com o WMI

Quando você executa um script em um sistema local que obtém dados de um sistema remoto, o WMI fornece suas credenciais para o provedor dos dados no sistema remoto. Isso requer apenas um nível de representação de Representar, 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 Delegar. O nível de representação Delegar é exigido por qualquer operação que envolva mais de um salto de rede. Para obter mais informações sobre a segurança do DCOM no WMI, consulte Configurar 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 Conexão ao WMI em um computador remoto.

Para usar a delegação para se conectar a um computador por meio de outro computador

  1. Habilite a delegação no Active Directory (Usuários e Computadores do Active Directory em Painel de ControleTarefas 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 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 fornece aos processos fora do controle direto a capacidade de usar suas credenciais.

  2. Modifique o código da seguinte maneira para indicar que você deseja usar a delegação.

    PowerShell

    Defina o parâmetro -Impersonation no cmdlet do 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 Inicializar COM para um aplicativo WMI.

    Para passar a identidade do cliente para servidores COM remotos em C++, defina cloaking na chamada para CoSetProxyBlanket. Para obter mais informações, confira 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 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

Proteger uma conexão remota ao WMI

Criar processos remotamente com o WMI