2011-01-20 17 views
14

¿Hay alguna manera de obtener la siguiente información mediante el script C#.Obtenga información de pc (sistema) en la máquina de Windows - Script de C#

Nombre PC de etiqueta de servicio CPU tipo velocidad de la CPU tamaño de la unidad c: \, RAM instalada, nombre del sistema operativo, OS clave de producto, oficina de correos versión, y la Oficina de clave de producto.

Gracias.

+10

BTW, C# normalmente no se denomina 'script' –

+2

Evan - No he intentado nada todavía – dps123

+0

@MitchWheat C# Script es algo separado de C#. Extensión de archivo '.csx', ejecutable por' csi.exe' incluido con versiones recientes de Visual Studio. –

Respuesta

10
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. 
       } 
      } 
     } 
    } 
} 
1

Hay un paquete nuget llamado MissingLinq.Linq2Management que ha envuelto casi todo sobre WMI en un objeto agradable fuertemente tipado. Parece muy agradable.

https://missinglinq.codeplex.com/

0

Para hacer esto Añadir la Microsoft.VB en su Refrence. Para agregar esto, haga clic con el botón derecho del mouse en la carpeta Refrence de la solución explore y haga clic en agregar Refrences, luego haga clic en .NET y haga clic en Microsoft.visualBasic y luego en Aceptar. Después de hacer esta importación esto como:

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

tiene el nombre PC como un valor que se desea, por lo que puede obtener esta información de Environment.MachineName si desea que el equipo local, o puede hacerlo IPHostEntry hostEntry = Dns.GetHostEntry(ip); continuación string host = hostEntry.HostName; utilizar DNS para resolver el nombre de una computadora remota si solo tiene su IP.

Usted puede obtener cierta información del registro, después de comprobar que el registro remoto está en funcionamiento, asumiendo que usted quiere un equipo remoto:

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

Y se puede iniciar si la encuentra detenido:

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

Añadir esta declaración using a la parte superior de la página:

using Microsoft.Win32; 

Para el nombre de la computadora, puede ir a 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(); 

Para todos los comandos locales de registro, basta con retirar Registry.OpenRemoteBaseKey( y , computer).

Para el nombre de la CPU:

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(); 

Para el nombre del sistema operativo y la clave:

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); 

De Geeks With Blogs para obtener las claves de producto:

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); 
} 

que obtiene los duros a cabo del camino. El punto es que el registro es tu amigo.

Cuestiones relacionadas