2009-06-09 2 views
7

Welche Klassen sollte ich in C# verwenden, um Informationen über einen bestimmten Computer in meinem Netzwerk zu erhalten? (Wie wer an diesem Computer angemeldet ist, welches Betriebssystem auf diesem Computer ausgeführt wird, welche Ports geöffnet sind etc.)C#: Informationen über Computer in Domäne

+1

Versuchen Sie, diesen Code auf dem Zielcomputer auszuführen? Oder versuchen Sie, dies von Ihrem Computer aus auszuführen und Informationen über einen anderen Computer über das Netzwerk zu erhalten? – Nate

+0

Ich möchte den Code von meinem Computer aus ausführen, um Informationen über einen anderen Computer über das Netzwerk zu erhalten, dessen IP – melculetz

+0

Beispiel für eine Remote-WMI-Abfrage in meiner Antwort. – Nate

Antwort

2

Schauen Sie in die WMI-Bibliothek.

9

Zur Kasse System.Management und System.Management.ManagementClass. Beide werden für den Zugriff auf WMI verwendet, um die fraglichen Informationen abzurufen.

Edit: mit Probe Aktualisiert WMI von Remote-Computer zuzugreifen:

ConnectionOptions options; 
options = new ConnectionOptions(); 

options.Username = userID; 
options.Password = password; 
options.EnablePrivileges = true; 
options.Impersonation = ImpersonationLevel.Impersonate; 

ManagementScope scope; 
scope = new ManagementScope("\\\\" + ipAddress + "\\root\\cimv2", options); 
scope.Connect(); 

String queryString = "SELECT PercentProcessorTime, PercentInterruptTime, InterruptsPersec FROM Win32_PerfFormattedData_PerfOS_Processor"; 

ObjectQuery query; 
query = new ObjectQuery(queryString); 

ManagementObjectSearcher objOS = new ManagementObjectSearcher(scope, query); 

DataTable dt = new DataTable(); 
dt.Columns.Add("PercentProcessorTime"); 
dt.Columns.Add("PercentInterruptTime"); 
dt.Columns.Add("InterruptsPersec"); 

foreach (ManagementObject MO in objOS.Get()) 
{ 
    DataRow dr = dt.NewRow(); 
    dr["PercentProcessorTime"] = MO["PercentProcessorTime"]; 
    dr["PercentInterruptTime"] = MO["PercentInterruptTime"]; 
    dr["InterruptsPersec"] = MO["InterruptsPersec"]; 

    dt.Rows.Add(dr); 
} 

Hinweis: Benutzer-ID, Passwort und ipAddress alle definiert werden müssen, entsprechend Ihrer Umgebung.

+0

danke für die Links – melculetz

3

zu konvertieren. Hier ist ein Beispiel für die Verwendung in einer Box über. MSDN hat den Rest der Elemente, die Sie alle können.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Management; 

namespace About_box 
{ 
    public partial class About : Form 
    { 
     public About() 
     { 
      InitializeComponent(); 
      FormLoad(); 
     } 

     public void FormLoad() 
     { 
      SystemInfo si; 
      SystemInfo.GetSystemInfo(out si); 

      txtboxApplication.Text = si.AppName; 
      txtboxVersion.Text = si.AppVersion; 
      txtBoxComputerName.Text = si.MachineName; 
      txtBoxMemory.Text = Convert.ToString((si.TotalRam/1073741824) 
       + " GigaBytes"); 
      txtBoxProcessor.Text = si.ProcessorName; 
      txtBoxOperatingSystem.Text = si.OperatingSystem; 
      txtBoxOSVersion.Text = si.OperatingSystemVersion; 
      txtBoxManufacturer.Text = si.Manufacturer; 
      txtBoxModel.Text = si.Model; 
     } 


    } 
} 
+1

Dies funktioniert nur, wenn der Code auf dem betreffenden Rechner ausgeführt wird; und funktioniert nicht, um Informationen über einen anderen Computer im Netzwerk zu erhalten. – Nate

+4

Wo ist diese Klasse (SystemInfo) definiert? – SLaks