Wessam A Halim Ответов: 1

Получить данные сервера серийный номер процессора и дату


Уважаемые эксперты ;
я работаю над проектом приложения c# windows с использованием entity framework и базы данных sql, мне нужно получить серийный номер процессора сервера и текущую дату, но с сервера, на котором есть база данных, которую я подключил не с локального ПК

Что я уже пробовал:

public static string GetMotherBoardID()
        {
            string cpuInfo = string.Empty;
            ManagementClass mc = new ManagementClass("win32_processor");
            ManagementObjectCollection moc = mc.GetInstances();

            foreach (ManagementObject mo in moc)
            {
                if (cpuInfo == "")
                {
                    //Get only the first CPU's ID
                    cpuInfo = mo.Properties["processorID"].Value.ToString();
                    break;
                }
            }
            return cpuInfo;
        }

M4rLask

В чем же проблема?

1 Ответов

Рейтинг:
11

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.