Delegeren met WMI
Wanneer u een script uitvoert op een lokaal systeem dat gegevens ophaalt van een extern systeem, levert WMI uw referenties aan de provider van de gegevens op het externe systeem. Hiervoor is slechts een impersonatieniveau van Impersonatenodig, omdat er maar één netwerkoverdracht nodig is. Als het script echter verbinding maakt met WMI op het externe systeem en probeert een logboekbestand op een extra extern systeem te openen, mislukt het script tenzij het imitatieniveau is Delegeren. imitatieniveau delegeren is vereist voor elke bewerking waarbij meerdere netwerkhops zijn betrokken. Zie Client Application Process Securityinstellen voor meer informatie over DCOM-beveiliging in WMI. Voor meer informatie over een netwerkhop tussen twee computers, zie Verbinding maken met WMI op een externe computer.
Delegering gebruiken om verbinding te maken met een computer via een andere computer
Schakel delegering in Active Directory (Active Directory Gebruikers en computers in ConfiguratieschermBeheertaken) op de domeincontroller. Het account op het externe systeem moet worden gemarkeerd als Vertrouwd voor delegering en het account op het lokale systeem mag niet worden gemarkeerd als Account gevoelig is en kan niet worden gedelegeerd. het lokale systeem, het externe systeem en de domeincontroller moeten lid zijn van hetzelfde domein of in vertrouwde domeinen.
Opmerking Het gebruik van delegatie is een beveiligingsrisico omdat processen buiten uw directe controle de mogelijkheid bieden om uw referenties te gebruiken.
Wijzig uw code op de volgende manier om aan te geven dat u delegatie wilt gebruiken.
-
PowerShell
-
Stel de parameter -Impersonation van de WMI-cmdlet in op Delegeren.
-
VBScript
-
Stel de parameter impersonationLevel in op Delegate bij de aanroep van SWbemLocator.ConnectServer of Delegatein de moniker tekenreeks. U kunt de impersonatie ook instellen in een SWbemSecurity-object.
-
C++
-
Stel de parameter imitatieniveau in op RPC_C_IMP_LEVEL_DELEGATE in de aanroep naar CoInitializeSecurity of CoSetProxyBlanket. Zie COM initialiseren voor een WMI-toepassingvoor meer informatie over wanneer u deze aanroepen doet.
Als u de clientidentiteit wilt doorgeven aan externe COM-servers in C++, stelt u cloaking in de aanroep in naar CoSetProxyBlanket. Zie Cloakingvoor meer informatie.
-
Voorbeelden
In het volgende codevoorbeeld ziet u een monikertekenreeks waarmee de imitatie wordt ingesteld op Delegate. Let op dat de autoriteit moet worden ingesteld op Kerberos.
set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")
In het volgende codevoorbeeld ziet u hoe u imitatie instelt op Delegate (een waarde van 4) met behulp van 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
Verwante onderwerpen