Pobierz informacje o komputerze (systemie) z Windows-skrypt C#

Czy istnieje sposób na uzyskanie następujących informacji za pomocą skryptu c#.

Nazwa PC Tag Usługi Typ procesora Prędkość procesora Rozmiar c: \ drive, Zainstalowana pamięć RAM, Nazwa systemu operacyjnego, Klucz produktu OS, Wersja Office i klucz produktu Office.

Dzięki.
Author: dps123, 2011-01-20

5 answers

WMI jest tym, czego szukasz.

Http://www.codeproject.com/KB/cs/EverythingInWmi02.aspx

Dodam jeszcze link do części 3, która skupia się na sprzęcie poprzez WMI

Http://www.codeproject.com/KB/cs/EverythingInWmi03.aspx

MSDN jest również świetnym zasobem dla zakresów WMI...

Http://msdn.microsoft.com/en-us/library/aa394554 (v=vs.85). aspx

 14
Author: dotalchemy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-20 01:55:14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;   //This namespace is used to work with WMI classes. For using this namespace add reference of System.Management.dll .
using Microsoft.Win32;     //This namespace is used to work with Registry editor.

namespace OperatingSystemInfo1
{
    class TestProgram
    {
        static void Main(string[] args)
        {
            SystemInfo si = new SystemInfo();       //Create an object of SystemInfo class.
            si.getOperatingSystemInfo();            //Call get operating system info method which will display operating system information.
            si.getProcessorInfo();                  //Call get  processor info method which will display processor info.
            Console.ReadLine();                     //Wait for user to accept input key.
        }
    }
    public class SystemInfo
    {
        public void getOperatingSystemInfo()
        {
            Console.WriteLine("Displaying operating system info....\n");
            //Create an object of ManagementObjectSearcher class and pass query as parameter.
            ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_OperatingSystem");
            foreach (ManagementObject managementObject in mos.Get())
            {
                if (managementObject["Caption"] != null)
                {
                    Console.WriteLine("Operating System Name  :  " + managementObject["Caption"].ToString());   //Display operating system caption
                }
                if (managementObject["OSArchitecture"] != null)
                {
                    Console.WriteLine("Operating System Architecture  :  " + managementObject["OSArchitecture"].ToString());   //Display operating system architecture.
                }
                if (managementObject["CSDVersion"] != null)
                {
                    Console.WriteLine("Operating System Service Pack   :  " + managementObject["CSDVersion"].ToString());     //Display operating system version.
                }
            }
        }

        public void getProcessorInfo()
        {
            Console.WriteLine("\n\nDisplaying Processor Name....");
            RegistryKey processor_name = Registry.LocalMachine.OpenSubKey(@"Hardware\Description\System\CentralProcessor\0", RegistryKeyPermissionCheck.ReadSubTree);   //This registry entry contains entry for processor info.

            if (processor_name != null)
            {
                if (processor_name.GetValue("ProcessorNameString") != null)
                {
                    Console.WriteLine(processor_name.GetValue("ProcessorNameString"));   //Display processor ingo.
                }
            }
        }
    }
}
 11
Author: Kamal Sukla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-20 11:36:31

Istnieje pakiet nuget o nazwie MissingLinq.Linq2Management, który zawiera prawie wszystko o WMI w ładny, mocno wpisany obiekt. Wygląda całkiem nieźle.

Https://missinglinq.codeplex.com/

 1
Author: viggity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-31 18:34:49

Aby to zrobić dodaj Microsoft.VB w Twoim refrenie. Aby dodać to kliknij prawym przyciskiem myszy, aby Refrence folder rozwiązania eksploruj i kliknij Dodaj Refrencje, a następnie kliknij. NET i kliknij Microsoft.visualBasic następnie kliknij ok. Po zrobieniu tego Importuj to tak :

using Microsoft.VisualBasic.Devices;

          public void getSystemDetails()
            {
                UserName.Text = Environment.UserName; // User name of PC
                LabelOS.Text = getOSInfo(); // OS version of pc
                MachineTxt.Text = Environment.MachineName;// Machine name
                string OStype = "";
                if (Environment.Is64BitOperatingSystem) { OStype = "64-Bit, "; } else { OStype = "32-Bit, "; }
                OStype += Environment.ProcessorCount.ToString() + " Processor";
                label8.Text = OStype; // Processor type

                ulong toalRam = cinfo.TotalPhysicalMemory;
                double toal = Convert.ToDouble(toalRam / (1024 * 1024));
                int t = Convert.ToInt32(Math.Ceiling(toal / 1024).ToString());
                label6.Text = t.ToString() + " GB";// ram detail
            }

        public string getOSInfo()
        {
            //Get Operating system information.
            OperatingSystem os = Environment.OSVersion;
            //Get version information about the os.
            Version vs = os.Version;

            //Variable to hold our return value
            string operatingSystem = "";

            if (os.Platform == PlatformID.Win32Windows)
            {
                //This is a pre-NT version of Windows
                switch (vs.Minor)
                {
                    case 0:
                        operatingSystem = "95";
                        break;
                    case 10:
                        if (vs.Revision.ToString() == "2222A")
                            operatingSystem = "98SE";
                        else
                            operatingSystem = "98";
                        break;
                    case 90:
                        operatingSystem = "Me";
                        break;
                    default:
                        break;
                }
            }
            else if (os.Platform == PlatformID.Win32NT)
            {
                switch (vs.Major)
                {
                    case 3:
                        operatingSystem = "NT 3.51";
                        break;
                    case 4:
                        operatingSystem = "NT 4.0";
                        break;
                    case 5:
                        if (vs.Minor == 0)
                            operatingSystem = "Windows 2000";
                        else
                            operatingSystem = "Windows XP";
                        break;
                    case 6:
                        if (vs.Minor == 0)
                            operatingSystem = "Windows Vista";
                        else
                            operatingSystem = "Windows 7 or Above";
                        break;
                    default:
                        break;
                }
 0
Author: Jeetendra Negi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-02 22:49:47

Masz nazwę komputera jako żądaną wartość, więc możesz pobrać ją z Environment.MachineName, jeśli chcesz mieć komputer lokalny, lub możesz użyć IPHostEntry hostEntry = Dns.GetHostEntry(ip);, a następnie string host = hostEntry.HostName;, aby użyć DNS do rozwiązania nazwy komputera zdalnego, jeśli masz tylko jego adres IP.

Możesz uzyskać pewne informacje z rejestru, po sprawdzeniu, że działa zdalny rejestr, zakładając, że chcesz mieć zdalny komputer:

ServiceController sc = new ServiceController("RemoteRegistry", computer); 
if (sc.Status.Equals(ServiceControllerStatus.Running)) 
{ 
    // do your stuff 
} 

I możesz go uruchomić, jeśli znalezione zostało zatrzymane:

if (sc.Status.Equals(ServiceControllerStatus.Stopped) || 
sc.Status.Equals(ServiceControllerStatus.StopPending)) 
{ 
    sc.Start(); 
} 

Dodaj to using oświadczenie na górze swojej Strona:

using Microsoft.Win32;

Dla nazwy komputera, można przejść do HKEY_LOCAL_MACHINE \ SYSTEM\CurrentControlSet\Control \ ComputerName\ActiveComputerName:

string path = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName";
RegistryKey rk = Registry.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path);
string pcName = rk.GetValue("computerName").ToString();

Dla dowolnych poleceń rejestru lokalnego, po prostu usuń Registry.OpenRemoteBaseKey( i , computer).

Dla nazwy procesora:

string path = @"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0";
RegistryKey rk = Registry.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path);
string cpuName = rk.GetValue("processorNameString").ToString();

Dla nazwy i klucza systemu operacyjnego:

string path = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion";
RegistryKey rk = Registry.OpenRemoteBaseKey(RegistryHive.LocalMachine, computer).OpenSubKey(path);
string osName = rk.GetValue("productName").ToString();
string servicePack = rk.GetValue("CSDVersion").ToString();
byte[] digitalProductId = registry.GetValue("DigitalProductId") as byte[];
string osProductKey = DecodeProductKey(digitalProductId);

Od maniaków z blogami za zdobycie kluczy produktu:

public static string DecodeProductKey(byte[] digitalProductId)
{
  // Offset of first byte of encoded product key in 
  //  'DigitalProductIdxxx" REG_BINARY value. Offset = 34H.
  const int keyStartIndex = 52;
  // Offset of last byte of encoded product key in 
  //  'DigitalProductIdxxx" REG_BINARY value. Offset = 43H.
  const int keyEndIndex = keyStartIndex + 15;
  // Possible alpha-numeric characters in product key.
  char[] digits = new char[]
  {
    'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R', 
    'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9',
  };
  // Length of decoded product key
  const int decodeLength = 29;
  // Length of decoded product key in byte-form.
  // Each byte represents 2 chars.
  const int decodeStringLength = 15;
  // Array of containing the decoded product key.
  char[] decodedChars = new char[decodeLength];
  // Extract byte 52 to 67 inclusive.
  ArrayList hexPid = new ArrayList();
  for (int i = keyStartIndex; i <= keyEndIndex; i++)
  {
    hexPid.Add(digitalProductId[i]);
  }
  for (int i = decodeLength - 1; i >= 0; i--)
  {
    // Every sixth char is a separator.
    if ((i + 1) % 6 == 0)
    {
      decodedChars[i] = '-';
    }
    else
    {
      // Do the actual decoding.
      int digitMapIndex = 0;
      for (int j = decodeStringLength - 1; j >= 0; j--)
      {
        int byteValue = (digitMapIndex << 8) | (byte)hexPid[j];
        hexPid[j] = (byte)(byteValue / 24);
        digitMapIndex = byteValue % 24;
        decodedChars[i] = digits[digitMapIndex];
      }
    }
  }
  return new string(decodedChars);
}

To usuwa te trudne z drogi. Chodzi o to, że rejestr jest twoim przyjacielem.

 0
Author: vapcguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-25 18:05:36