【问题标题】:Retrieving Disk information from remote server C#从远程服务器 C# 检索磁盘信息
【发布时间】:2016-09-27 08:39:16
【问题描述】:

您好,我们正在开发分布式结构上的 C# framework v4.0 asp.net mvc 应用程序。我们将 Server1 用于图像 Server2 用于 mysql 数据库,Server3 用于 Web。我的任务是从所有三台服务器获取可用磁盘空间和总磁盘空间,并显示在 Web 管理页面上。我知道如何使用 WMI 显示本地主机的磁盘空间。我想显示具有静态 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);

【问题讨论】:

  • 我认为我无法正确配置 dcom 安全性
  • 我已经尝试了文章中的所有步骤,但仍然被拒绝访问
  • 在 System.Management.ManagementScope.Initialize() 在 System.Management.ManagementScope.InitializeGuts(Object o) 在 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 堆栈跟踪信息。 ManagementScope.Connect()

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


【解决方案1】:
  1. 确保允许远程连接到这台计算机已启用。
  2. 确保在 WindowsFirewall 中启用了 WMI --> 允许的应用程序。
  3. 确保管理员可以在 WMI 控件属性中访问 CIMV2 文件夹。
  4. 确保 WMI 和 RPC 服务正在运行。
  5. 用户拥有远程系统的管理员权限

【讨论】:

  • 现在出现此异常用户凭据不能用于本地连接(我远程连接到电脑)
  • @skhurams 我认为您正在尝试查询本地系统,在查询本地系统时无需传递凭据
  • 它不是本地系统,因为我在第一行 ManagementScope scope = new ManagementScope("\\\\Server IP\\root\\cimv2");
  • 如果我必须获取本地系统信息,那很容易
猜你喜欢
  • 2014-02-20
  • 2010-09-29
  • 2014-09-09
  • 1970-01-01
  • 2015-03-07
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多