Delegieren mit WMI

Wenn Sie ein Skript in einem lokalen System ausführen, das Daten von einem Remotesystem abruft, stellt WMI Ihre Anmeldeinformationen dem Anbieter der Daten im Remotesystem zur Verfügung. Dies erfordert nur die Identitätswechselebene Impersonate (Identität annehmen), da nur ein Netzwerkhop erforderlich ist. Wenn das Skript jedoch eine Verbindung mit WMI im Remotesystem herstellt und versucht, eine Protokolldatei in einem zusätzlichen Remotesystem zu öffnen, schlägt das Skript fehl, es sei denn, die Identitätswechselebene lautet Delegate (Delegieren). Die Identitätswechselebene Delegate wird von jedem Vorgang benötigt, der mehr als einen Netzwerkhop umfasst. Weitere Informationen zur DCOM-Sicherheit in WMI finden Sie unter Festlegen der Prozesssicherheit für Clientanwendungen. Weitere Informationen zu einer Verbindung mit einem Netzwerkhop zwischen zwei Computern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

So verwenden Sie die Delegierung zum Herstellen einer Verbindung mit einem Computer über einen anderen Computer

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

    Hinweis: Die Verwendung der Delegierung ist ein Sicherheitsrisiko, da Prozesse außerhalb Ihrer direkten Kontrolle die Möglichkeit erhalten, Ihre Anmeldeinformationen zu verwenden.

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

    PowerShell

    Legen Sie den Parameter -Impersonation im WMI-Cmdlet auf Delegate fest.

    VBScript

    Legen Sie den Parameter impersonationLevel im Aufruf von SWbemLocator.ConnectServer auf Delegate bzw. in der moniker-Zeichenfolge auf Delegate fest. Sie können den Identitätswechsel auch in einem SWbemSecurity-Objekt festlegen.

    C++

    Legen Sie den Parameter der Identitätswechselebene im Aufruf von CoInitializeSecurity oder CoSetProxyBlanket auf RPC_C_IMP_LEVEL_DELEGATE fest. Weitere Informationen zum Zeitpunkt dieser Aufrufe finden Sie unter Initialisieren von COM für eine WMI-Anwendung.

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

Beispiele

Das folgende Codebeispiel zeigt eine moniker-Zeichenfolge, 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 der Identitätswechsel mithilfe von SWbemLocator.ConnectServer auf Delegate (Wert: 4) festgelegt wird.

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