littleGreenDude
Мне кажется, что вы на правильном пути. Это просто вопрос определения того, какие части для запроса.
Это можно улучшить, но это только начало:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
using System.IO;
namespace ConsoleApp2
{
class Program
{
public static bool GetComputerInfo(string machine, string win32object, string attributename)
{
bool bReturnValue = true;
try
{
// Use the Storage management scope
ManagementScope scope = new ManagementScope($@"\\{machine}\ROOT\cimv2");
// Define the query
ObjectQuery query = new ObjectQuery($"SELECT * FROM {win32object}");
// create the search
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
//get a collection of WMI objects
ManagementObjectCollection queryCollection = searcher.Get();
//enumerate the collection.
foreach (ManagementObject m in queryCollection)
{
// access properties of the WMI object
Console.WriteLine($"{attributename} : {m[attributename]}");
}
}
catch(Exception ex)
{
Console.WriteLine($"{ex.Message}\n{ex.InnerException}\n{ex.StackTrace}");
bReturnValue = false;
}
return bReturnValue;
}
static void Main(string[] args)
{
// could make machine a command line arg
string sTargetMachine = "localhost"; // <-- put target machine name here
GetComputerInfo(sTargetMachine, "win32_ComputerSystemProduct", "IdentifyingNumber");
GetComputerInfo(sTargetMachine, "win32_bios", "SerialNumber");
GetComputerInfo(sTargetMachine, "win32_LocalTime", "Year");
GetComputerInfo(sTargetMachine, "win32_LocalTime", "Month");
GetComputerInfo(sTargetMachine, "win32_LocalTime", "Day");
GetComputerInfo(sTargetMachine, "win32_LocalTime", "Hour");
GetComputerInfo(sTargetMachine, "win32_LocalTime", "Minute");
GetComputerInfo(sTargetMachine, "win32_LocalTime", "Second");
Console.ReadLine();
}
}
}
Некоторые другие вещи, которые я нашел полезными во время работы над этим, запускают Powershell
в powershell выполните следующие действия, чтобы получить список того, что там находится и может быть запрошено
get-wmiobject -List
Затем, основываясь на том, какой класс / объект вы хотите получить, вы можете легко просмотреть доступные атрибуты, например
PS> get-wmiobject win32_ComputerSystemProduct
IdentifyingNumber : XXXXXXX
Name : Latitude XXXX
Vendor : Dell Inc.
Version :
Caption : Computer System Product
littleGreenDude
Дополнительное примечание - Я почти уверен, что вы должны войти в систему как сетевой администратор, чтобы получить результаты с удаленной машины. В противном случае, я предполагаю, что вы, вероятно, увидите какую-то ошибку RPC.