TripleAntigen
TripleAntigen

Reputation: 2301

Enumerating list of drives on a remote domain workstation

I am trying to come up with a good way to enumerate hard disks on remote workstations, possibly including administrative shares, so I can audit key files on them without having to access them via sneakernet. I have domain administrator rights. Security policy prohibits using WMI which would be a great solution.

I can retrieve a list of computers using Active Directory, but I need some way to determine what drives are available on each system. Is such a thing feasible? A fellow developer offered some VB6 code from years ago that used WNetOpenEnum, but I was hoping that since we are at .NET framework 4, maybe there's a more elegant / managed way of working with this.

Any ideas would be much appreciated!

EDIT: I'm keen to use technologies that are more generally supported, such as standard APIs etc. WMI is a great solution but apparently is blocked by default by Windows Firewall, so its availability is not guaranteed.

Upvotes: 0

Views: 2504

Answers (1)

George Duckett
George Duckett

Reputation: 32438

Add a reference to System.Management, then:

using System;
using System.Management;

namespace WmiConnectRemote
{
    class Program
    {
        static void Main(string[] args)
        {
            var machine = "XXXX";

            var options = new ConnectionOptions { Username = "XXXX", Password = "XXXX" };

            var scope = new ManagementScope(@"\\" + machine + @"\root\cimv2", options);

            var queryString = "select Name, Size, FreeSpace from Win32_LogicalDisk where DriveType=3"; var query = new ObjectQuery(queryString);

            var worker = new ManagementObjectSearcher(scope, query);

            var results = worker.Get();

            foreach (ManagementObject item in results)
            {
                Console.WriteLine("{0} {2} {1}", item["Name"], item["FreeSpace"], item["Size"]);
            }

        }
    }
}

Upvotes: 2

Related Questions