Seite 1 von 1

Über die WMI Informationen über den Rechner erfahren

Verfasst: Dienstag 1. Februar 2005, 13:47
von 2bock
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:

Ich habe noch eine andere und einfachere Lösung gefunden.

Verfasst: Dienstag 8. Februar 2005, 09:20
von 2bock
Es gibt noch eine einfachere Lösung zu diesem Thema.

http://python.sandtner.org/viewtopic.ph ... 87bf#15053

Verfasst: Donnerstag 24. August 2006, 04:18
von JR
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

Verfasst: Donnerstag 24. August 2006, 06:14
von 2bock
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 ;-)

Verfasst: Donnerstag 24. August 2006, 11:45
von JR
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

Verfasst: Donnerstag 24. August 2006, 11:58
von gerold
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
:-)

Verfasst: Donnerstag 24. August 2006, 12:33
von JR
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

Verfasst: Mittwoch 30. August 2006, 08:34
von Nirven
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).