我正在寻找从系统中收集有关远程WMI呼叫失败原因的更多信息的想法。
Which permissions/rights does a user need to have WMI access on remote machines?中的详细步骤很有帮助,但要么我不小心错过了某些内容,要么还需要为我的环境配置更多内容。
当我运行.NET 4.0 C#代码(下面的代码段)时,我看到以下异常:
System.UnauthorizedAccessException发生Message = Access is 否认。 (HRESULT异常:0x80070005(E_ACCESSDENIED))
Source = System.Management StackTrace: 在System.Management.ThreadDispatch.Start() 在System.Management.ManagementScope.Initialize() 在System.Management.ManagementScope.Connect() 在MyNamespace.MyClass.GetWmiInfo()in ...
这是发生错误的代码。调用Connect()时会抛出异常。
var scope = new ManagementScope("\\\\HOSTNAME\\root\\cimv2")
{
Options =
{
Impersonation = ImpersonationLevel.Impersonate,
Password = "password",
Username = "domain\\username"
}
};
scope.Connect();
代码在Windows 7计算机上运行,WMI连接的目标是Windows XP计算机。 注意:如果我颠倒这两个角色,我会发现类似的问题。
我没有在目标计算机的安全日志中看到任何错误。
如果我将其凭据正在使用的用户添加到目标计算机上的Administrators组,则对Connect()
的调用成功,因此问题似乎确实是由于尚未提供的权限或访问权限理所当然的。
通常当我遇到访问被拒绝的错误时,我可以在日志中找到一个提供更多细节的条目,或者能够运行 regmon 或 filemon 捕获一些有用的信息。但是由于这个WMI / DCOM错误,我不知道还能在哪里寻找更多信息。
任何建议都非常感谢!
更新:我使用WBEMTest.exe进行了测试,发现访问权限也被拒绝,除非我以管理员身份运行。我正在尝试继续使用此工具来进一步隔离问题。