Querying the size of a drive on a remote server is giving me an error

Posted by Testifier on Stack Overflow See other posts from Stack Overflow or by Testifier
Published on 2012-11-15T16:58:28Z Indexed on 2012/11/15 16:59 UTC
Read the original article Hit count: 210

Filed under:
|
|

Here's what I have:

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

            //connect to the scope
            scope.Connect();

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

            //this class retrieves the collection of objects returned by the query
            var searcher = new ManagementObjectSearcher(scope, query);

            //this is similar to using a data adapter to fill a data set - use an instance of the ManagementObjectSearcher to get the collection from the query and store it

            ManagementObjectCollection queryCollection = searcher.Get();

            //iterate through the object collection and get what you're looking for - in my case I want the FreeSpace of the D drive
            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"]);

The error says:

ManagementException was unhandled by user code

Not found

I'm assuming the query to get the drive size is wrong.

Please note that I AM getting the freeSpace value at the line:

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

So I know the query IS working for freeSpace.

Can anyone give me a hand?

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET