查询远程服务器上驱动器的大小给我一个未找到的错误 [英] Querying the size of a drive on a remote server is giving me a not found error
本文介绍了查询远程服务器上驱动器的大小给我一个未找到的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我所拥有的:
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;
}
这行代码给了我一个错误:
This line of code is giving me an error:
driveSize = Convert.ToInt64(m["Size"]);
错误说:
ManagementException was unhandled by user code
未找到
我假设获取驱动器大小的查询是错误的.
I'm assuming the query to get the drive size is wrong.
请注意,我在该行获得了 freeSpace 值:
Please note that I AM getting the freeSpace value at the line:
freeSpace = Convert.ToInt64(m["FreeSpace"]);
所以我知道查询适用于 freeSpace.
So I know the query IS working for freeSpace.
谁能帮我一把?
推荐答案
查询中必须是 SELECT * FROM Win32_LogicalDisk...
.
因为您在查询中选择了FreeSpace",只会返回可用空间,其他一切都会抛出异常.
Because you are selecting "FreeSpace" in your query nothing else but the free space will be returned, and everything else will throw an exception.
如果您不想返回所有内容(因为它是远程查询),您有几个选择:
In the case you dont want to return everything (because its a remote query) you have a couple options:
- 我不确定管理层是否会允许您只选择两个项目?我不熟悉语法.但是你可以试试
SELECT FreeSpace, Size FROM Win32_LogicalDisk...
- 如果没有,您可以简单地进行两次查询,一次查询空闲空间,另一次查询大小.
这篇关于查询远程服务器上驱动器的大小给我一个未找到的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文