Получение информации о диске с удаленного компьютера
Я могу просмотреть удаленно подключенный компьютер из этой статьи: Удаленный рабочий стол с использованием 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