WMI - 在远程域计算机中读取 IIS 应用程序时引发“拒绝访问”异常

本文关键字:拒绝访问 应用程序 异常 IIS 程域 计算机 读取 WMI | 更新日期: 2023-09-27 18:31:16

下面是我在远程机器中使用WMI在域中读取IIS应用程序的代码。

var connOptions = new ConnectionOptions
                                  {
                                      Username = "USERNAME",
                                      Password = "PASSWORD",
                                      Authority = "ntlmdomain:DOMAINNAME",
                                      EnablePrivileges = true,
                                      Impersonation = ImpersonationLevel.Impersonate
                                  };
var scope = new ManagementScope(@"''SERVERNAME'root'WebAdministration", connOptions);
var WMIQuery = new ObjectQuery("SELECT * FROM Application");
var searcher = new ManagementObjectSearcher(scope, WMIQuery);
//Connect to WMI
scope.Connect();
//Write the list of Applications info 
foreach (ManagementObject queryObj in searcher.Get())
{
    Console.WriteLine("SiteName: {0} - {1}", queryObj["SiteName"], queryObj["Path"]);
}

它失败,出现以下异常:

System.Management.ManagementException was caught
  Message=Access denied 
  Source=System.Management
  StackTrace:
       at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
       at System.Management.ManagementObjectSearcher.Get()
       at Program.Main(String[] args) 
  InnerException: 

我尝试过的补救措施:

  1. 我遵循了在 UAC 下处理远程连接中给出的建议,但没有成功。引用它:

如果您的计算机是域的一部分,请连接到目标计算机使用本地管理员组中的域帐户远程计算机。则 UAC 访问令牌筛选将不会影响本地管理员组中的域帐户。不要使用远程计算机上的本地非域帐户,即使该帐户位于管理员组中。

  1. 在"计算机管理"-">服务和应用程序"->"WMI 控件"->"查看属性"->导航到"根/Web 管理"-">安全性"中添加并分配给用户完全控制。

WMI - 在远程域计算机中读取 IIS 应用程序时引发“拒绝访问”异常

通过将 ConnectionOptions 的 Authentication 属性设置为 'AuthenticationLevel.PacketPrivacy' 来解决

详细信息见:WMI 的访问被拒绝