从远程服务器C检索磁盘信息#

问题描述:

嗨,我们正在研究分布式结构上的C#framework v4.0 asp.net mvc应用程序。我们将Server1用于图像Server2,用于mysql数据库和Server3 for web。我的任务是从所有三台服务器获得可用磁盘空间和总磁盘空间,并显示在Web管理页面上。我知道如何使用WMI显示本地主机的磁盘空间。我想显示具有静态IP的Server1和Server3磁盘信息(所有三台服务器都启用了远程桌面和共享)。但我得到从远程服务器C检索磁盘信息#

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

这里是我的代码

ManagementScope scope = new ManagementScope("\\\\Server IP\\root\\cimv2"); 
scope.Connect(); 

ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem"); 
SelectQuery query1 = new SelectQuery("Select * from Win32_LogicalDisk"); 

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); 

ManagementObjectCollection queryCollection = searcher.Get(); 

ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(scope, query1); 
ManagementObjectCollection queryCollection1 = searcher1.Get(); 

foreach (ManagementObject m in queryCollection) 
{ 
    // Display the remote computer information 
    Console.WriteLine("Computer Name : {0}", 
         m["csname"]); 
    Console.WriteLine("Windows Directory : {0}", 
         m["WindowsDirectory"]); 
    Console.WriteLine("Operating System: {0}", 
         m["Caption"]); 
    Console.WriteLine("Version: {0}", m["Version"]); 
    Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]); 
    Console.WriteLine(); 

} 

foreach (ManagementObject mo in queryCollection1) 
{ 
    Console.WriteLine(" Disk Name : {0}", mo["Name"]); 
    Console.WriteLine(" Disk Size : {0}", mo["Size"]); 
    Console.WriteLine(" FreeSpace : {0}", mo["FreeSpace"]); 
    Console.WriteLine(" Disk DeviceID : {0}", mo["DeviceID"]); 
    Console.WriteLine(" Disk VolumeName : {0}", mo["VolumeName"]); 
    Console.WriteLine(" Disk SystemName : {0}", mo["SystemName"]); 
    Console.WriteLine("Disk VolumeSerialNumber : {0}", mo["VolumeSerialNumber"]); 
    Console.WriteLine(); 
} 
Console.ReadLine(); 

但是当编译转到行scope.Connect(); 则抛出异常访问被拒绝

我已经试过this article using Dcomcnfg.exe security但仍然无法摆脱这种例外

我也曾尝试

ConnectionOptions options = new ConnectionOptions(); 
options.Username = @"Admin-PC\username"; 
options.Password = @"password"; 
options.Impersonation = ImpersonationLevel.Impersonate; 
options.Authentication = AuthenticationLevel.Connect; 
options.EnablePrivileges = true; 
options.Timeout = new TimeSpan(0, 60, 0); 
ManagementScope scope = new ManagementScope("\\\\IP\\root\\cimv2", options); 
+0

我想我不能正确地配置DCOM安全 – skhurams

+0

http://serverfault.com/questions/28520/which-permissions-rights-does-a-user-need- wmi-access-on-remote-machines – CodeCaster

+0

我已经尝试了文章中的所有步骤,但仍然拒绝访问 – skhurams

  1. 确保允许这台电脑远程连接已启用。
  2. 确保WindowsFirewall中的WMI已启用 - >允许的应用程序。
  3. 在WMI控件属性中,确保管理员可以访问CIMV2文件夹。
  4. 确保WMI和RPC服务正在运行。
  5. 用户具有远程系统上的管理权限
+0

all checked ex中断点4 – skhurams

+0

现在得到这个异常用户凭证不能用于本地连接(IM远程连接到PC) – skhurams

+0

@skhurams我认为你试图查询本地系统,而查询本地系统时无需通过凭证 –