查询远程服务器上的驱动器大小给我一个未找到的错误

时间:2012-11-15 16:58:29

标签: c# .net wmi

这就是我所拥有的:

public static bool DriveHasLessThanTenPercentFreeSpace(string server)
{
    long driveSize = 0;
    long freeSpace = 0;

    var oConn = new ConnectionOptions {Username = "username", Password = Settings.Default.SQLServerAdminPassword};
    var scope = new ManagementScope("\\\\" + server + "\\root\\CIMV2", oConn);
    scope.Connect();

    var query = new ObjectQuery("SELECT FreeSpace FROM Win32_LogicalDisk where DeviceID = 'D:'");

    var searcher = new ManagementObjectSearcher(scope, query);
    ManagementObjectCollection queryCollection = searcher.Get();
    foreach (ManagementObject m in queryCollection)
    {
        //the FreeSpace value is in bytes
        freeSpace = Convert.ToInt64(m["FreeSpace"]);

        //error happens here!
        driveSize = Convert.ToInt64(m["Size"]);
    }

    long percentFree = ((freeSpace / driveSize) * 100);
    if (percentFree < 10)
    {
        return true;
    }
    return false;
}

这行代码给了我一个错误:

driveSize = Convert.ToInt64(m["Size"]);

错误说:

ManagementException was unhandled by user code

未找到

我假设查询得到驱动器大小错误。

请注意,我在行中获得了freeSpace值:

freeSpace = Convert.ToInt64(m["FreeSpace"]);

所以我知道查询IS适用于freeSpace。

任何人都可以帮我一把吗?

1 个答案:

答案 0 :(得分:2)

您的查询中需要SELECT * FROM Win32_LogicalDisk...

因为你正在选择&#34; FreeSpace&#34;在你的查询中,除了可用空间之外别无其他,其他一切都会引发异常。

如果您不想返回所有内容(因为它是一个远程查询),您有几个选项:

  • 我不确定管理层是否允许您只选择两个项目?我不熟悉语法。不过,您可以尝试SELECT FreeSpace, Size FROM Win32_LogicalDisk...
  • 如果没有,你可以简单地做两个查询,一个用于自由空间,一个用于大小。