Delegieren mit WMI

Wenn Sie ein Skript auf einem lokalen System ausführen, das Daten von einem Remotesystem abruft, stellt WMI Ihre Anmeldeinformationen an den Anbieter der Daten auf dem Remotesystem bereit. Dies erfordert nur eine Identitätswechselebene von Impersonate, da nur ein Netzwerksprung erforderlich ist. Wenn das Skript jedoch eine Verbindung mit WMI auf dem Remotesystem herstellt und versucht, eine Protokolldatei auf einem zusätzlichen Remotesystem zu öffnen, schlägt das Skript fehl, es sei denn, die Identitätswechselebene ist Delegate. Die Identitätswechselebene Delegate ist für jeden Vorgang erforderlich, der mehr als einen Netzwerksprung umfasst. Weitere Informationen zur DCOM-Sicherheit in WMI finden Sie unter Einstellen der Sicherheit des Clientanwendungsprozesses. Weitere Informationen zu einer Netzwerksprungverbindung zwischen zwei Computern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

So verwenden Sie die Delegierung, um eine Verbindung mit einem Computer über einen anderen Computer herzustellen

  1. Aktivieren Sie die Delegierung in Active Directory (Active Directory-Benutzer und -Computer in SystemsteuerungAdministrative Aufgaben) auf dem Domänencontroller. Das Konto auf dem Remotesystem muss als vertrauenswürdig für die Delegierung gekennzeichnet werden, und das Konto auf dem lokalen System darf nicht als vertraulich gekennzeichnet werden und kann nicht delegiert werden. Das lokale System, das Remotesystem und der Domänencontroller müssen Mitglieder derselben Domäne oder in vertrauenswürdigen Domänen sein.

    Hinweis Die Delegierung ist ein Sicherheitsrisiko, da Prozesse außerhalb Ihrer direkten Steuerung die Möglichkeit haben, Ihre Anmeldeinformationen zu verwenden.

  2. Ändern Sie Ihren Code wie folgt, um anzugeben, dass Sie die Delegierung verwenden möchten.

    PowerShell

    Legen Sie den Parameter -Impersonation für das WMI-Cmdlet auf Delegate fest.

    VBScript

    Legen Sie den ParameterimpersonationLevel im Aufruf von SWbemLocator.ConnectServer auf Delegate oder in der Monikerzeichenfolge auf Delegate fest. Sie können den Identitätswechsel auch in einem Objekt SWbemSecurity festlegen.

    C++

    Legen Sie den Parameter Identitätswechselebene auf RPC_C_IMP_LEVEL_DELEGATE im Aufruf auf CoInitializeSecurity oder CoSetProxyBlanket fest. Weitere Informationen dazu, wann diese Aufrufe auszuführen sind, finden Sie unter Initialisieren von COM für eine WMI- Anwendung.

    Um die Clientidentität an COM-Remoteserver in C++ zu übergeben, legen Sie Cloaking im Aufruf von CoSetProxyBlanket fest. Weitere Informationen finden Sie unter Cloaking.

Beispiele

Das folgende Codebeispiel zeigt eine Monikerzeichenfolge, die den Identitätswechsel auf Delegate festlegt. Beachten Sie, dass die Autorität auf Kerberos festgelegt werden muss.

set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")

Das folgende Codebeispiel zeigt, wie Sie den Identitätswechsel mithilfe von SWbemLocator.ConnectServer auf Delegate (Wert 4) festlegen.

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(Computer_B, _
                                             "Root\CIMv2", _
                                             AdminAccount, _
                                             MyPassword, _
                                             "kerberos:Domain\Computer_B")
objWMIService.Security_.ImpersonationLevel = 4

Schützen einer WMI-Remoteverbindung

Remoteerstellung von Prozessen mit WMI