Über die WMI Informationen über den Rechner erfahren

Code-Stücke können hier veröffentlicht werden.
Antworten
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Dienstag 1. Februar 2005, 13:47

Windows® Management Instrumentation (WMI)
heißt die Microsoft Implementierung des Web Based Enterprise Management (WBEM)-Standard. WMI bietet den Zugriff auf Systeminformationen, die bislang nur mit komplizierten API-Aufrufen zu ermitteln waren.

Das hier unten aufgeführte Beispiel dient als Beispiel, um halt möglichst schnell Informationen zu erhalten.

Welche weiteren Möglichkeiten existieren findet ihr unter folgendem Link:

http://msdn.microsoft.com/library/defau ... lasses.asp

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

import wmi
from win32com.client import *
from array import *

class WMIInformations:        
           
    def GetProcessorType(self,computer='./root/cimv2'):
        return self.GetWMIInfo(computer,'Win32_Processor','ProcessorType')
       
    def GetProcessorManufactor(self,computer='./root/cimv2'):
        return self.GetWMIInfo(computer,'Win32_Processor','Description')
               
    def GetIPAddress(self,computer='./root/cimv2'):
        return self.GetWMIInfo(computer,'Win32_NetworkAdapterConfiguration','IPAddress')
        
    def GetSystemName(self,computer='./root/cimv2'):
        return self.GetWMIInfo(computer,'Win32_Processor','SystemName')
        
    def GetAllFreeSpace(self,disk='c'):
        try:
            if not disk.find(':'):
                disk+=':'
                
            for disk in wmi.WMI().Win32_LogicalDisk (DriveType=3):
                return disk.Caption, "%0.2f%% free" % (100.0 * long (disk.FreeSpace) / long (disk.Size)),str((int(disk.FreeSpace)/1024)/1024) + ' MB'
        except:
            return 'error in GetAllFreeSpace'
        
    def GetWMIInfo(self,computer, modul, propertie):
        # Dies ist die Main Funktion
        try:
            wmi = GetObject('winmgmts://' + computer )
            _wmiobj = wmi.ExecQuery('select * from '+ modul)
            for i in _wmiobj:
                return i.Properties_(propertie).Value
        except:
            return 'error in GetWMIInfo()'       
        
wmiInfo= WMIInformations()
print wmiInfo.GetIPAddress()
Viel Spaß mit dem Code.

Hinweis: Selbstverständlich kann man durch die WMI auch Systemeinstellungen ändern.

Greetz from 2bock :wink:
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Dienstag 8. Februar 2005, 09:20

Es gibt noch eine einfachere Lösung zu diesem Thema.

http://python.sandtner.org/viewtopic.ph ... 87bf#15053
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Donnerstag 24. August 2006, 04:18

Hi 2bock!

Wo finde ich das Modul win32com.client?

Brauche ich dieses pywin?

Bei mir scheitert ein Ausführen deines Scripts schon nach

Code: Alles auswählen

import wmi
from win32com.client import *
from array import *
Danke und Gruß
JR
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Donnerstag 24. August 2006, 06:14

Du benötigst die win32 Extensions von marc hammond. Du bekommst diese hier unter http://sourceforge.net/projects/pywin32 .

Wenn Du diese installiert hast, sollte eigentlich alles funktionieren.

Greetz from 2bock ;-)
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Donnerstag 24. August 2006, 11:45

Hi!

Danke für den Link. Hab das schon zweimal runtergeladen und installiert. Nur wenn ich Pywin starten will, fehlt ihm immer eine *.dll. Ich glaube die hieß MVRC71.dll o.ä.

Verstehe ich es richtig. Pywin liefert mir das nötige Modul und enthält selbst noch eine IDE, welche ich ja nicht benutzen muss?

Grüße und Danke
JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 24. August 2006, 11:58

JR hat geschrieben:Nur wenn ich Pywin starten will, fehlt ihm immer eine *.dll. Ich glaube die hieß MVRC71.dll o.ä.
Hi Jamil!

http://www.python.net/crew/mhammond/win32/
Suche nach "DLL".

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Donnerstag 24. August 2006, 12:33

Hi!

Heute morgen um 4 oder 5 wars wohl zu spät, da habe ich die *.dll nicht gefunden.

Ich empfhele die Seite http://www.dll-files.com/dllindex/

Ich bin begeistert. Mit

Code: Alles auswählen

import win32com.client
werden Träume wahr :)

Hier http://www.microsoft.com/technet/script ... x?mfr=true werde ich mich sicher immer wieder umsheen.

Sowas habe ich mir schon immer gewünscht.

Also merci vielmals.
Jamil
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Mittwoch 30. August 2006, 08:34

Die Möglichkeit gefällt mir, nur verstehe ich es noch nicht so ganz. Leider ist die Dokumentation der Funktionen in win32com auch nicht sehr hilfreich.

GetObject erwartet als erstes Argument einen "Pathname". Der wird in dem Beispiel aus "'winmgmts://'" und "computer" zusammengesetzt. Woher kommen bzw. wofür stehen die Werte? Kann ich so auch andere Rechner über das Netzwerk abfragen?

Als Anmerkung: import * ist nicht unbedingt hilfreich, wenn man gucken will, woher eine Funktion kommt, und in dem Programm wird in der Funktion "GetWMIInfo" der Name "wmi" überschrieben (das importierte Modul steht also in der Funktion nicht mehr zur Verfügung).
Antworten