使用 WMI 进行委派
在从远程系统获取数据的本地系统上运行脚本时,WMI 会将凭据提供给远程系统上数据的提供程序。 这只需要模拟级别的“模拟”,因为只需要一个网络跃点。 但是,如果脚本连接到远程系统上的 WMI 并尝试打开其他远程系统上的日志文件,则脚本将失败,除非模拟级别为“委派”。 涉及多个网络跃点的任何操作都需要委派模拟级别。 有关 WMI 中 DCOM 安全性的详细信息,请参阅设置客户端应用程序进程安全性。 有关两台计算机之间的单网络跃点连接的详细信息,请参阅连接到远程计算机上的 WMI。
使用委派通过另一台计算机连接到计算机
在域控制器上的 Active Directory(控制面板管理任务中的“Active Directory 用户和计算机”)中启用委派。 对于委派,远程系统上的帐户必须标记为“信任它,可以被委派”,并且本地系统上的帐户不得标记为“敏感帐户,不能被委派”。 本地系统、远程系统和域控制器必须是同一域或受信任域中的成员。
注意 使用委派存在安全风险,因为它使直接控制范围之外的进程能够使用凭据。
使用以下方式修改代码,以指示要使用委派。
-
PowerShell
-
将 WMI cmdlet 上的“-Impersonation”参数设置为“委派”。
-
VBScript
-
在对 SWbemLocator.ConnectServer 的调用中将“impersonationLevel”参数设置为“委派”,或在名字对象字符串中设置为“委派”。 还可以在 SWbemSecurity对象中设置模拟。
-
C++
-
在调用 CoInitializeSecurity 或 CoSetProxyBlanket 时,将模拟级别参数设置为 RPC_C_IMP_LEVEL_DELEGATE。 有关何时进行这些调用的详细信息,请参阅初始化 WMI 应用程序的 COM。
若要在 C++ 中将客户端标识传递到远程 COM 服务器,请在对 CoSetProxyBlanket 的调用中设置掩蔽。 有关详细信息,请参阅掩蔽。
-
示例
以下代码示例演示一个名字对象字符串,该字符串将模拟设置为“委派”。 请注意,权限必须设置为 Kerberos。
set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")
以下代码示例演示如何使用 SWbemLocator.ConnectServer 将模拟设置为 “委派”(值为 4)。
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(Computer_B, _
"Root\CIMv2", _
AdminAccount, _
MyPassword, _
"kerberos:Domain\Computer_B")
objWMIService.Security_.ImpersonationLevel = 4
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈