Compartilhar via


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

  1. 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.

  2. 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

Protegendo uma conexão WMI remota

Criando processos remotamente com WMI