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

时间:2016-09-27 08:39:16

标签: c# asp.net wmi remote-access diskspace

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

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);

1 个答案:

答案 0 :(得分:0)

  1. 确保已启用允许与此计算机的远程连接
  2. 确保在WindowsFirewall中启用了WMI - >允许的应用。
  3. 确保管理员可以在WMI控制属性中访问CIMV2文件夹。
  4. 确保WMI和RPC服务正在运行。
  5. 用户拥有远程系统的管理员权限
相关问题