Получение информации о диске с удаленного компьютера

Я могу просмотреть удаленно подключенный компьютер из этой статьи: Удаленный рабочий стол с использованием c-net. но мне это не нужно. Мне просто нужно подключиться к этому компьютеру и получить данные о свободном пространстве диска C. Как я мог это сделать? Я могу подключиться к удаленному рабочему столу. Я могу получить driveInfo, используя пространство имен IO. а как их объединить?

4 ответа

Использовать System.Management пространство имен и Win32_Volume Класс WMI для этого. Вы можете запросить экземпляр с DriveLetter из C: и получить его FreeSpace Свойство следующим образом:

ManagementPath path = new ManagementPath() {
    NamespacePath = @"root\cimv2",
    Server = "<REMOTE HOST OR IP>"
};
ManagementScope scope = new ManagementScope(path);
string condition = "DriveLetter = 'C:'";
string[] selectedProperties = new string[] { "FreeSpace" };
SelectQuery query = new SelectQuery("Win32_Volume", condition, selectedProperties);

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
using (ManagementObjectCollection results = searcher.Get())
{
    ManagementObject volume = results.Cast<ManagementObject>().SingleOrDefault();

    if (volume != null)
    {
        ulong freeSpace = (ulong) volume.GetPropertyValue("FreeSpace");

        // Use freeSpace here...
    }
}

Также есть Capacity свойство, которое хранит общий размер тома.

Вот эквивалент vb.net на тот случай, если вам нужно его перевести.

        Dim path = New ManagementPath With {.NamespacePath = "root\cimv2",
                                          .Server = "<REMOTE HOST OR IP>"}
    Dim scope = New ManagementScope(path)
    Dim condition = "DriveLetter = 'C:'"
    Dim selectedProperties = {"FreeSpace"}
    Dim query = New SelectQuery("Win32_Volume", condition, selectedProperties)
    Dim searcher = New ManagementObjectSearcher(scope, query)
    Dim results = searcher.Get()
    Dim volume = results.Cast(Of ManagementObject).SingleOrDefault()
    If volume IsNot Nothing Then
        Dim freeSpace As ULong = volume.GetPropertyValue("FreeSpace")

    End If

Вы можете собирать информацию об удаленном компьютере с помощью WMI, но для этого требуется, чтобы на удаленном компьютере был запущен RPC.

Пожалуйста, ознакомьтесь с этими ссылками: http://www.codeproject.com/Articles/8804/Collecting-Remote-System-Information-With-WMI и http://blogs.msdn.com/b/securitytools/archive/2009/07/29/wmi-programming-using-c-net.aspx, использующее-с-net.aspx

Потеряв целый день в попытках заставить WMI работать удаленно, но безуспешно, я обнаружил альтернативу, использующую счетчики производительности. Просто проверьте Free Megabytes счетчик в LogicalDisk категория, используя желаемую букву диска (с добавлением ":") в качестве имени экземпляра, чтобы получить обновленное значение доступного свободного места на диске:

      "LogicalDisk(C:)\Free Megabytes"

Вы можете получить к нему доступ программно на C# через класс PerformanceCounter .

Для доступа к нему удаленно вам необходимо указать имя сервера в конструкторе класса счетчика производительности, а олицетворенная учетная запись должна быть добавлена ​​в группу «Пользователи монитора производительности»:

      net localgroup "Performance Monitor Users" %username% /add
Другие вопросы по тегам