Discussion:
Mit VB.NET Systeminformationen abrufen
(zu alt für eine Antwort)
Peter Bucher
2005-01-26 10:55:29 UTC
Permalink
Guten Tag,

ich möchte mit VB.NET an Systeminformationen rankommen, so wie diese z. B.
im Gerätemanager stehen.

Dazu gehören Festplatten, CPU, CD-ROM LW`s etc..

Steht mir in VB.NET eine andere Möglichkeit dazu zur Verfügung als das WMI?

Wenn möglich sollte ich diese auch per Remote aus dem Netzwerk abrufen
können (dies scheitert leider bisher in VB6) könnte dies in VB.NET gehen?

Gruss aus der Schweiz, Peter Bucher
Peter Fleischer
2005-01-26 11:02:32 UTC
Permalink
Peter Bucher wrote:
...
Post by Peter Bucher
ich möchte mit VB.NET an Systeminformationen rankommen, so wie diese
z. B. im Gerätemanager stehen.
Dazu gehören Festplatten, CPU, CD-ROM LW`s etc..
Steht mir in VB.NET eine andere Möglichkeit dazu zur Verfügung als das WMI?
Peter,
schau dir mal den ManagementObject-Namensraum an.
Post by Peter Bucher
Wenn möglich sollte ich diese auch per Remote aus dem Netzwerk abrufen
können (dies scheitert leider bisher in VB6) könnte dies in VB.NET gehen?
WMI geht doch auch in VB6. Um auf einen fremden Rechner zuzugreifen, musst
du zuerst den Locator mit dem Rechner starten.

Peter
Peter Bucher
2005-01-26 12:13:45 UTC
Permalink
Was meinst du mit dem Locator?


Hier mein bisheriges Problem mit WMI unter Visual Basic 6:

Das Progr(ä)mmchen muss alle Systeminformationen (Harddisk, Prozessor,
Username, IDEController etc....) abfragen und zur Verfügung stellen, damit
man mit den Daten weiterarbeiten kann.

Nun ich erledige dies mit WMI auf die folgende Art:

-----------------
Function getWMI(SQL)
On Error Resume Next
Set getWMI = GetObject("winmgmts:").ExecQuery(SQL)
If Err.Number <> 0 Then
MsgBox ("Kein WMI installiert!")
Err.Clear
Set getWMI = Nothing
getWMI = False
End If
End Function

'//Besitzername ermitteln
strsql = "SELECT * FROM Win32_OperatingSystem"
Set objWMI = getWMI(strsql)
For Each Item In objWMI
getData = Item.RegisteredUser
Exit For
Next
Set objWMI = Nothing
'..... -------------------

Jetzt kam mir aber die Idee, der Einfachheit halber, damit ich das Programm
nur auf einem Rechner halten muss (damit die Datenbankhaltung vereinfacht
wird), das ich das WMI per Remote Access, also per Angabe der Computernamens
im Netztwerk abfragen könnte.

Das dies geht sieht man an den vielen "Systeminformationsprogrammen" die man
übers LAN nutzen kann.

Habe diverse Artikel bei Microsoft gelesen, daraus folgernd kam ich auf
diese Lösung~:


---------
strComputer = "SERVER"
Set objWMIService = GetObject("winmgmts:" & _ '<---- Hier kommt Zugriff
verweigert
"{impersonationLevel=Impersonate}!\\" & _
"SERVER" & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem In colSettings
getData = "Available Physical Memory: " & _
objOperatingSystem.FreePhysicalMemory
Next
------------------Das ganze ist bei Microsoft auch dokumentiert (ist ein
Beispiel von MS) und funktioniert auch soweit wenn ich als Computername
meine lokale Maschine nehme... wenn ich jetzt aber auf meinen Server
zugreifen möchte kommt Zugriff verweigert.

Auf dem Server ist Windows XP SP2, vielleicht hat es etwas mit dem zu tun,
also weitere Nachforschungen.
Ich bin auf folgende Seiten gestossen:

-
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/connecting_to_wmi_on_a_remote_computer.asp
-
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/setting_client_application_process_security.asp

Also kann mann irgendwie das Security Level für einen Prozess einstellen,
nur wie könnte das in VB aussehen, ich habe keinen blassen Schimmer.

Hoffe auf Feedback, Peter Bucher
Post by Peter Fleischer
...
Post by Peter Bucher
ich möchte mit VB.NET an Systeminformationen rankommen, so wie diese
z. B. im Gerätemanager stehen.
Dazu gehören Festplatten, CPU, CD-ROM LW`s etc..
Steht mir in VB.NET eine andere Möglichkeit dazu zur Verfügung als das WMI?
Peter,
schau dir mal den ManagementObject-Namensraum an.
Post by Peter Bucher
Wenn möglich sollte ich diese auch per Remote aus dem Netzwerk abrufen
können (dies scheitert leider bisher in VB6) könnte dies in VB.NET gehen?
WMI geht doch auch in VB6. Um auf einen fremden Rechner zuzugreifen, musst
du zuerst den Locator mit dem Rechner starten.
Peter
Peter Fleischer
2005-01-26 13:26:43 UTC
Permalink
Peter Bucher wrote:
...
Post by Peter Bucher
------------------Das ganze ist bei Microsoft auch dokumentiert (ist
ein Beispiel von MS) und funktioniert auch soweit wenn ich als
Computername meine lokale Maschine nehme... wenn ich jetzt aber auf
meinen Server zugreifen möchte kommt Zugriff verweigert.
Peter,
hat denn dein Account auf dem Server die entsprechenden Rechte?
Post by Peter Bucher
Auf dem Server ist Windows XP SP2, vielleicht hat es etwas mit dem zu
tun, also weitere Nachforschungen.
Windows XP ist doch kein Server-Betriebssystem. Wird denn der Zielcomputer
in der gleichen Domäne verwaltet? Hast du mal im Domänencontroller die
Rechte hoch gesetzt?
Post by Peter Bucher
-
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/connecting_to_wmi_on_a_remote_computer.asp

Und das Beispiel mit dem Locator funktioniert?

Peter
Peter Bucher
2005-01-26 14:38:46 UTC
Permalink
Hallo Peter

Ich möchte das Tool für die erfassung von Neu-PC`s benutzen, diese sind in
einer normalen Arbeitsgruppe.

Benutzerkonten sind jedesmal verschieden, Passwörter für die Useraccounts
keine, mein Notebook ist in einer Domaine.

Es kann ja nicht die Lösung sein, das ich für jeden PC jeweils das Programm
neu kompillieren muss...

Gruss Peter
Post by Peter Fleischer
...
Post by Peter Bucher
------------------Das ganze ist bei Microsoft auch dokumentiert (ist
ein Beispiel von MS) und funktioniert auch soweit wenn ich als
Computername meine lokale Maschine nehme... wenn ich jetzt aber auf
meinen Server zugreifen möchte kommt Zugriff verweigert.
Peter,
hat denn dein Account auf dem Server die entsprechenden Rechte?
Post by Peter Bucher
Auf dem Server ist Windows XP SP2, vielleicht hat es etwas mit dem zu
tun, also weitere Nachforschungen.
Windows XP ist doch kein Server-Betriebssystem. Wird denn der Zielcomputer
in der gleichen Domäne verwaltet? Hast du mal im Domänencontroller die
Rechte hoch gesetzt?
Post by Peter Bucher
-
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/connecting_to_wmi_on_a_remote_computer.asp
Post by Peter Fleischer
Und das Beispiel mit dem Locator funktioniert?
Peter
Peter Fleischer
2005-01-26 16:27:17 UTC
Permalink
Peter Bucher wrote:
...
Post by Peter Bucher
Es kann ja nicht die Lösung sein, das ich für jeden PC jeweils das
Programm neu kompillieren muss...
Peter,
mit einer Tabelle mit Adresse, Nutzername und Password für jeden PC des
Netzes dürfte das doch kein Problem sein.

Peter
Peter Bucher
2005-01-27 08:44:56 UTC
Permalink
Wir sind eine kleine IT Bude und diese PCs sind unsere Neu PC`s die kommen
und gehen, da kann ich doch keine Liste erstellen, es geht darum nur schnell
mal die Systeminformationen abzurufen.

Wenn ich mit einem kleinen Programm ein Windows Account einrichten und
wieder löschen kann, das währe vielleicht eine gute Sache, nur wie könnte
sowas aussehen?

Gruss Peter
Post by Peter Fleischer
...
Post by Peter Bucher
Es kann ja nicht die Lösung sein, das ich für jeden PC jeweils das
Programm neu kompillieren muss...
Peter,
mit einer Tabelle mit Adresse, Nutzername und Password für jeden PC des
Netzes dürfte das doch kein Problem sein.
Peter
Peter Fleischer
2005-01-27 08:52:00 UTC
Permalink
Post by Peter Bucher
Wir sind eine kleine IT Bude und diese PCs sind unsere Neu PC`s die
kommen und gehen, da kann ich doch keine Liste erstellen, es geht
darum nur schnell mal die Systeminformationen abzurufen.
Wenn ich mit einem kleinen Programm ein Windows Account einrichten und
wieder löschen kann, das währe vielleicht eine gute Sache, nur wie
könnte sowas aussehen?
Peter,
gerade da ist es doch ganz einfach. Image rüber und im Image ist ein
Wartungs-Account mit festem Nutzernamen, Account und Rechten. Wenn der Kunde
dann dieses Image nutzt, dann kannst du gleich Fernwartung machen.

Peter

Peter Bucher
2005-01-26 14:39:29 UTC
Permalink
Kann ich mit einem kleinen Hilfsprogramm vielleicht Rechte für das Programm
auf den PC`s verschaffen?

OS ist immer Windows XP Home/Pro. SP2


Gruss Peter
Post by Peter Fleischer
...
Post by Peter Bucher
------------------Das ganze ist bei Microsoft auch dokumentiert (ist
ein Beispiel von MS) und funktioniert auch soweit wenn ich als
Computername meine lokale Maschine nehme... wenn ich jetzt aber auf
meinen Server zugreifen möchte kommt Zugriff verweigert.
Peter,
hat denn dein Account auf dem Server die entsprechenden Rechte?
Post by Peter Bucher
Auf dem Server ist Windows XP SP2, vielleicht hat es etwas mit dem zu
tun, also weitere Nachforschungen.
Windows XP ist doch kein Server-Betriebssystem. Wird denn der Zielcomputer
in der gleichen Domäne verwaltet? Hast du mal im Domänencontroller die
Rechte hoch gesetzt?
Post by Peter Bucher
-
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/connecting_to_wmi_on_a_remote_computer.asp
Post by Peter Fleischer
Und das Beispiel mit dem Locator funktioniert?
Peter
Peter Fleischer
2005-01-26 16:29:39 UTC
Permalink
Post by Peter Bucher
Kann ich mit einem kleinen Hilfsprogramm vielleicht Rechte für das
Programm auf den PC`s verschaffen?
OS ist immer Windows XP Home/Pro. SP2
Peter,
wieso Hilfsprogramm? Es ist doch alles in WMI bzw. den Management-Klassen
enthalten. Du musst lediglich die Parameter der Ziel-PC's kennen und
eintragen, z.B. aus einer Liste.

Peter
Herfried K. Wagner [MVP]
2005-01-26 11:03:45 UTC
Permalink
Hallo Peter!
Post by Peter Bucher
ich möchte mit VB.NET an Systeminformationen rankommen, so wie diese z. B.
im Gerätemanager stehen.
Dazu gehören Festplatten, CPU, CD-ROM LW`s etc..
Steht mir in VB.NET eine andere Möglichkeit dazu zur Verfügung als das WMI?
Nein. Dazu verwendet man üblicherweise WMI.
Post by Peter Bucher
Wenn möglich sollte ich diese auch per Remote aus dem Netzwerk abrufen
können (dies scheitert leider bisher in VB6) könnte dies in VB.NET gehen?
Das geht mit VB.NET genauso gut/schlecht wie in VB6.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
Peter Monadjemi
2005-01-26 14:19:17 UTC
Permalink
Hallo Peter,

VB.NET bietet im Namespace System.Management einen eigenen Satz Klassen,
durch den die WMI-Programmierung deutlich komfortabler wird (wenngleich
diese, soweit ich weiss, nur die COM-Scripting-Bibliothek "kapseln"). Hier
ist ein Codeschnipsel, der ein paar Eigenschaften von Win32_ComputerSystem
in einer Listbox auf einem Remote-Computer, dessen IP-Adresse ich angegeben
habe, in eine Listbox einträgt:

Dim Co As New ConnectionOptions
Co.Username = "Administrator"
Co.Password = "pw"
Dim sComp As String = "192.168.1.3"
Dim Ms As New ManagementScope("\\" & sComp & "\root\cimv2", Co)
Try
Ms.Connect()
MsgBox("Verbindung steht!")
Dim Mc As New ManagementClass("Win32_ComputerSystem")
Dim Mo As ManagementObject
For Each Mo In Mc.GetInstances()
Exit For
Next
liErgebnis.Items.Add("Manufacturer: " &
Mo.Properties("Manufacturer").Value)
liErgebnis.Items.Add("Modell: " & Mo.Properties("Model").Value)
liErgebnis.Items.Add("Name: " & Mo.Properties("Name").Value)
liErgebnis.Items.Add("Arbeitsspeicher: " &
Mo.Properties("TotalPhysicalMemory").Value.ToString)
Catch Ex As ManagementException
MsgBox("WMI-ERROR: " & Ex.Message)
Catch Ex As SystemException
MsgBox("ERROR:" & Ex.Message)
End Try

Damit das funktioniert, müssen auf dem Remote-Computer die Berechtigungen
für den WMI-Namespace für das zugreifende Benutzerkonto erteilt werden.

Ich finde die "neue" Art WMI zu programmieren deutlich komfortabler als bei
VB6, wenngleich es keine grundsätzlich neuen Möglichkeiten gibt.

Viele Grüße
Peter
(MVP Visual Basic.NET)
Post by Peter Bucher
Guten Tag,
ich möchte mit VB.NET an Systeminformationen rankommen, so wie diese z. B.
im Gerätemanager stehen.
Dazu gehören Festplatten, CPU, CD-ROM LW`s etc..
Steht mir in VB.NET eine andere Möglichkeit dazu zur Verfügung als das WMI?
Wenn möglich sollte ich diese auch per Remote aus dem Netzwerk abrufen
können (dies scheitert leider bisher in VB6) könnte dies in VB.NET gehen?
Gruss aus der Schweiz, Peter Bucher
Guten Tag,
ich möchte mit VB.NET an Systeminformationen rankommen, so wie diese z. B.
im Gerätemanager stehen.
Dazu gehören Festplatten, CPU, CD-ROM LW`s etc..
Steht mir in VB.NET eine andere Möglichkeit dazu zur Verfügung als das WMI?
Wenn möglich sollte ich diese auch per Remote aus dem Netzwerk abrufen
können (dies scheitert leider bisher in VB6) könnte dies in VB.NET gehen?
Gruss aus der Schweiz, Peter Bucher
Loading...