[C#] Сбор информации о компьютере [1]
В случае, когда в вашей сети несколько сотен компьютеров, их учет стоит довольно остро. Перепробовав немало различных программ по учету программ, лицензий и железа пришел к выводу, необходимо написать собственное решение, отвечающее нашим запросам. Первым этапом разработки будет написание сборщика информации с компьютеров на языке C# в IDE SharpDeveloper. Пока я копался в интернете с вопросом как же можно из системы получить информацию о ней, то пришел к выводу, что информации на эту тему довольно мало, что было неожиданно. В основном натыкался на скрипты на VB и просьбы других программистов перевести их на C#, а в MSDN и вовсе довольно скудная информация. Я надеюсь, собранные здесь исходники кому-то помогут в написании программы.
Собирать информацию я буду с помощью инструмента WMI. WMI является очень мощным инструментом и может предоставлять информацию о системе, причем неважно локальной или удаленной. WMI запросы, как правило, открыты в сети, если у вас есть привилегии необходимые для запроса. И хотя в WMI удаленные запросы просты, разработчикам они нравятся и по другой причине: WQL.
WQL позволяет составлять запросы WMI с использованием SQL-подобного языка запросов. Если вы знаете названия доступных полей, то можете получить информацию очень легко. Например, если вы хотите получить список логических дисков из системы можно использовать следующий запрос:
Можно, однако, уточнить поиск с помощью конкретных «полей» в запросе. Следующий запрос вернет свободное место, размер и имя всех фиксированных дисков:
Как видите, построение простых запросов WMI очень простое, очень похоже на запросы к базы данных.
Следующий довольно простой код выведет список всех активных процессов в системе:
Код для вывода списка установленного программного обеспечения, с датой установки:
Код для вывода информации о службах их описании и состоянии:
Код вывода большого количества разной информации о операционной системе, в том числе ее версию, номер сервиспака, количества свободной памяти и многое другое:
Ну и напоследок, код вывода всех дисков системы, их название, тип файловой системы, свободное место и тип диска:
В следующей части соберу информацию о железе и добавлю запросы по сети.
Так же рекомендую:
[C#] Сбор информации о компьютере [2]
Собирать информацию я буду с помощью инструмента WMI. WMI является очень мощным инструментом и может предоставлять информацию о системе, причем неважно локальной или удаленной. WMI запросы, как правило, открыты в сети, если у вас есть привилегии необходимые для запроса. И хотя в WMI удаленные запросы просты, разработчикам они нравятся и по другой причине: WQL.
WQL позволяет составлять запросы WMI с использованием SQL-подобного языка запросов. Если вы знаете названия доступных полей, то можете получить информацию очень легко. Например, если вы хотите получить список логических дисков из системы можно использовать следующий запрос:
Select * from Win32_LogicalDisk
Можно, однако, уточнить поиск с помощью конкретных «полей» в запросе. Следующий запрос вернет свободное место, размер и имя всех фиксированных дисков:
Select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3
Как видите, построение простых запросов WMI очень простое, очень похоже на запросы к базы данных.
Следующий довольно простой код выведет список всех активных процессов в системе:
using System;
using System.Management;
namespace test
{
class Program
{
public static void Main(string[] args)
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"Select Name, CommandLine From Win32_Process");
foreach (ManagementObject instance in searcher.Get())
{
Console.WriteLine("{0}", instance["Name"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Код для вывода списка установленного программного обеспечения, с датой установки:
using System;
using System.Management;
namespace test
{
class Program
{
public static void Main(string[] args)
{
ManagementObjectSearcher searcher_soft =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Product");
foreach (ManagementObject queryObj in searcher_soft.Get())
{
Console.WriteLine("<soft> Caption: {0} ; InstallDate: {1}</soft>",
queryObj["Caption"], queryObj["InstallDate"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Код для вывода информации о службах их описании и состоянии:
using System;
using System.Management;
namespace test
{
class Program
{
public static void Main(string[] args)
{
ManagementObjectSearcher searcher3 =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Service");
foreach (ManagementObject queryObj in searcher3.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_Service instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("Description: {0}", queryObj["Description"]);
Console.WriteLine("DisplayName: {0}", queryObj["DisplayName"]);
Console.WriteLine("Name: {0}", queryObj["Name"]);
Console.WriteLine("PathName: {0}", queryObj["PathName"]);
Console.WriteLine("Started: {0}", queryObj["Started"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Код вывода большого количества разной информации о операционной системе, в том числе ее версию, номер сервиспака, количества свободной памяти и многое другое:
using System;
using System.Management;
namespace test
{
class Program
{
public static void Main(string[] args)
{
ManagementObjectSearcher searcher5 =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_OperatingSystem");
foreach (ManagementObject queryObj in searcher5.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_OperatingSystem instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("BuildNumber: {0}", queryObj["BuildNumber"]);
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("FreePhysicalMemory: {0}", queryObj["FreePhysicalMemory"]);
Console.WriteLine("FreeVirtualMemory: {0}", queryObj["FreeVirtualMemory"]);
Console.WriteLine("Name: {0}", queryObj["Name"]);
Console.WriteLine("OSType: {0}", queryObj["OSType"]);
Console.WriteLine("RegisteredUser: {0}", queryObj["RegisteredUser"]);
Console.WriteLine("SerialNumber: {0}", queryObj["SerialNumber"]);
Console.WriteLine("ServicePackMajorVersion: {0}", queryObj["ServicePackMajorVersion"]);
Console.WriteLine("ServicePackMinorVersion: {0}", queryObj["ServicePackMinorVersion"]);
Console.WriteLine("Status: {0}", queryObj["Status"]);
Console.WriteLine("SystemDevice: {0}", queryObj["SystemDevice"]);
Console.WriteLine("SystemDirectory: {0}", queryObj["SystemDirectory"]);
Console.WriteLine("SystemDrive: {0}", queryObj["SystemDrive"]);
Console.WriteLine("Version: {0}", queryObj["Version"]);
Console.WriteLine("WindowsDirectory: {0}", queryObj["WindowsDirectory"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Ну и напоследок, код вывода всех дисков системы, их название, тип файловой системы, свободное место и тип диска:
using System;
using System.Management;
namespace test
{
class Program
{
public static void Main(string[] args)
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Volume");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_Volume instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Capacity: {0}", queryObj["Capacity"]);
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("DriveLetter: {0}", queryObj["DriveLetter"]);
Console.WriteLine("DriveType: {0}", queryObj["DriveType"]);
Console.WriteLine("FileSystem: {0}", queryObj["FileSystem"]);
Console.WriteLine("FreeSpace: {0}", queryObj["FreeSpace"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
В следующей части соберу информацию о железе и добавлю запросы по сети.
Так же рекомендую:
[C#] Сбор информации о компьютере [2]
1 комментарий