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

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


person Community    schedule 21.01.2013    source источник
comment
Зачем использовать клиент удаленного рабочего стола, если вам не нужен удаленный рабочий стол? Я бы посоветовал посмотреть на WMI для этого - см. этот вопрос, как это сделать.   -  person Bridge    schedule 21.01.2013


Ответы (3)


Используйте пространство имен 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, в котором хранится общий размер тома.

person Lance U. Matthews    schedule 21.01.2013
comment
Разве мне не нужно проходить аутентификацию в пути? - person ; 21.01.2013
comment
Это зависит от вашего окружения. Учетные данные и другие параметры безопасности можно задать с помощью scope.Options свойства. , который является экземпляром класса ConnectionOptions. - person Lance U. Matthews; 21.01.2013
comment
Что такое свободное пространство? Это в бите? - person Si8; 08.09.2017
comment
Я узнал, что это в байтах. но информация не точная. Например, на диске C: на сервере свободно 56,5 ГБ, но код показывает мне 62 ГБ. - person Si8; 08.09.2017
comment
@ Si8 Откуда вы берете точное количество свободного места? Проводник Виндоус? Вы рассчитываете свободные гигабайты, используя freeSpace / 1024 / 1024 / 1024 или, я полагаю, freeSpace / 1000 / 1000 / 1000? - person Lance U. Matthews; 08.09.2017
comment
Да... Я +1, потому что я использовал конвертер Google, он работал неправильно, но когда я применил правильные вычисления, он сработал. Спасибо. - person Si8; 08.09.2017

Вы можете собирать информацию об удаленном компьютере с помощью 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

person Juliano Nunes Silva Oliveira    schedule 21.01.2013

Вот эквивалент 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
person Alessandro Bernardi    schedule 27.07.2015