gogoflash
Goto Top

Hardware und Software Inventarisierung mit KIX

Wer hat nicht das Problem, irgendwann weiß man nicht mehr genau, was welcher Rechner für eine Konfiguration hat und wo welche Software liegt, weil die Kollegen untereinander keine Kommunikation haben. Eine Möglichkeit unter vielen ist KIX für eine Hardware und Software Inventarisierung zu nutzen.

Folgendes Skript liefert für jeden Rechner die Informationen über das Board, Prozessor, Speicher, Soundkarte, Grafikkarte, Festplatten und Partitionierung.

Zusätzlich wird auch die Installierte Software aufgeführt und allgemeine Infos herausgegeben.
Das Skript läßt sich ohne weiteres in ein bestehendes Loginskript integrieren. (Call inventar.kix).

Eine andere Variante ist unter.
Rechner Inventarisierung, Login Skript und Login Dokumentation mit Kix und Active Directory
zu finden.

Im einzelnen wird pro Rechner folgend Info ausgegeben:


Allgemeine Infos:
- Erfassungsdatum
- OS
- IP-Adresse
- MAC Adresse
- Installationsdatum
- WIndowsverzeichnis

Mainboard:
- Hersteller
- Typbezeichnung
- Biosversion

Prozessoren:
- Typ und Geschwindigkeit

Speicher (RAM):
- Anzahl der Speicherbänke
- Speichermodule
- Speicher gesamt

Festplatten:
- Hersteller und Größe

Partitionierung:
- Laufwerksbuchstaben, Partitionsgröße, Dateisystem, Beschreibung der Partition
- Freier Speicherplatz auf Partition

Grafikkarte:
- Hersteller und Speichergröße

Netzwerkkarte und Soundkarte
- Hersteller

Software:
- Name, Hersteller und Installationsdatum


Quellen: Für dieses Skript ist das Skriptcenter von Microsoft. Daraus habe ich mein Skript erstellt.

Mögliche Modifizierungen:
Es ist möglich den Updatestatus der Rechner abzufragen und mit einer Datei abzugleichen, um so fehlende Updates zu bestimmen. (WSUS für "Arme"). Dies könnte man dann als Trigger benutzen um fehlende Updates einzuspielen, zumindest als KIX Studie könnte man dies mal durchführen.

; Umleitung der Ausgaben auf eine Datei mit Rechnernamen im Dateinamen
$result=ReDirectOutput ("D:\Inventar\"+@Hostname+"_info.txt" ,1)
$objWMIService = GetObject( "winmgmts:./root/cimv2" )

; Workstationname und Datum der Erfassung:
? "@WKSTA" " @date"

; Allgemeine Infos:
?
? "Allgemein:"
?
? " Letzter Login von: "@USERID
if not ingroup("Administratoren")
? " keine Adminrechte"
endif
? " OS: "@PRODUCTTYPE" mit "@CSD
? " IP Adresse: " + @ipadress0
? " MAC Adresse: " + @address
? " "


$strComputer = "."
$objWMIService = GetObject("winmgmts:\\"+ $strComputer + "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each $objItem in $colItems
; Datum auf deutsche Konvention umwandeln
$jahr = left($objItem.InstallDate,4)
$tag= right($objItem.InstallDate,2)
$monat1 = left($objItem.InstallDate,6)
$monat = right($monat1,2)

? " Installationsdatum: " + $tag + "/" + $monat + "/" + $jahr
? " Windows Verzeichnis: " + $objItem.WindowsDirectory
? " "
Next

? "Mainboard:"
?
$SystemInfo = GetObject("WinMgmts:").InstancesOf("Win32_Baseboard")
For Each $Item In $SystemInfo
? " Hersteller : " + $Item.Manufacturer + " " + $Item.Product
? " Typ : " + $Item.Product
Next

$SystemInfo = GetObject("WinMgmts:").InstancesOf("Win32_BIOS")
For Each $Item In $SystemInfo
? " Bios : " + $Item.Name
? " Bios Version: " + $Item.SMBIOSBIOSVersion
? " "
Next

? "Prozessoren:"
?
$colItems = $objWMIService.ExecQuery( "Select * from Win32_Processor", "WQL", 48 )
For Each $objItem in $colItems
? " Name: " + Trim( $objItem.Name )
? " Manufacturer: " + $objItem.Manufacturer
? " Description: " + $objItem.Description
? " Current Clock Speed: " + $objItem.CurrentClockSpeed + " MHz"
?
Next

? "Speicher"
?

$colItems = $objWMIService.ExecQuery( "Select * from Win32_PhysicalMemoryArray", "WQL", 48 )
For Each $objItem In $colItems
? " Speicherbänke: " + $objItem.MemoryDevices
Next

$cntMod = 0
$strMod = ""
$colItems = $objWMIService.ExecQuery( "Select * from Win32_PhysicalMemory", "WQL", 48 )
For Each $objItem In $colItems
$cntMod = $cntMod + 1
$strCap = ( Val( $objItem.Capacity ) + 1023 ) / ( 1024 * 1024 )
$strMod = $strMod + " + " + $strCap
Next
? " Speichermodule: " + $cntMod + " (" + SubStr( $strMod, 4 ) + " MB)"

$colItems = $objWMIService.ExecQuery( "Select * from Win32_LogicalMemoryConfiguration", "WQL", 48 )
For Each $objItem In $colItems
? " Total Physical Memory: " + ( $objItem.TotalPhysicalMemory + 1023 ) / 1024 + " MB"
?
Next

;
? "Festplatten"
?
;
$colItems = $objWMIService.ExecQuery( "Select * from Win32_DiskDrive Where SCSITargetId >= 0",
"WQL", 48 )
For Each $objItem in $colItems
? " Manufacturer: " + $objItem.Manufacturer
? " Model: " + $objItem.Model
; Um mit großen Zahlen klarzukommen
$Size = $objItem.Size
$LSize = Len( $Size )
$MSize = SubStr( $Size, 1, $LSize - 3 )
$Size = ( 524288 + $MSize ) / 1048576
? " Size: $Size GB"
?
Next

;
? "Partitionierung"
?
$colItems = $objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
For Each $objItem in $colItems

? " Laufwerksbuchstabe: " + $objItem.Caption
? " Name: " + $objItem.VolumeName
? " Beschreibung: " + $objItem.Description
? " Volume Serial Number: " + $objItem.VolumeSerialNumber
; ? " Device ID: " + $objItem.DeviceID
? " Dateisystem: " + $objItem.FileSystem

$Size = $objItem.FreeSpace
$LSize = Len( $Size )
$MSize = SubStr( $Size, 1, $LSize - 3 )
$Size = ( 524288 + $MSize ) / 1048576
? " Freier Platz: " + $Size + " GB"
$Size = $objItem.Size
$LSize = Len( $Size )
$MSize = SubStr( $Size, 1, $LSize - 3 )
$Size = ( 524288 + $MSize ) / 1048576
? " Größe: " + $Size + " GB"
? " "
Next

;
? "Grafikkarte:"
?
;
$colItems = $objWMIService.ExecQuery( "Select * from Win32_VideoController", , 48 )
For Each $objItem in $colItems
? " Name: " + $objItem.Name
? " Video Processor: " + $objItem.VideoProcessor
? " Adapter RAM: " + ( ( $objItem.AdapterRAM + 524288 ) / 1048576 ) + " MB"
? " Video Mode Description: " + $objItem.VideoModeDescription
?
Next

;
? "Soundkarte:"
?
;
$colItems = $objWMIService.ExecQuery("Select * from Win32_SoundDevice")
For Each $objItem in $colItems
? " Name: " + $objItem.Caption
? " Herstellerr: " + $objItem.Manufacturer
? " "
Next
;
? "Netzwerkkarten:"
?
;

If $PC = ""
$PC = @wksta
EndIf

$objWMIService = GetObject( "winmgmts:
" + $PC + "/root/WMI" )

$colItems = $objWMIService.ExecQuery( "SELECT * FROM MSNdis_EthernetCurrentAddress WHERE Active > = True", "WQL", 48 )
For Each $objItem In $colItems
$strMsg = $strMsg + " Ethernet Adapter: " + $objItem.InstanceName + @crlf
$col2Items = $objWMIService.ExecQuery("SELECT * FROM MSNdis_LinkSpeed WHERE InstanceName > = '" + $objItem.InstanceName + "'", "WQL", 48 )
For Each $obj2Item In $col2Items
$strMsg = $strMsg + " NDIS Link Speed: " + $obj2Item.NdisLinkSpeed + " kBps@CRLF"
Next
$strMsg = $strMsg + @crlf
Next

? $strMsg
;
? "Software:"
;

$strComputer = "."
$objWMIService = GetObject("winmgmts:\\"+ $strComputer + "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_Product")
For Each $objItem in $colItems
? " Softwarename: " + $objItem.Caption
? " Version: " + $objItem.Version
? " Hersteller: " + $objItem.Vendor
$jahr = left($objItem.InstallDate,4)
$tag= right($objItem.InstallDate,2)
$monat1 = left($objItem.InstallDate,6)
$monat = right($monat1,2)
? " Installiert am: " + + $tag + "/" + $monat + "/" + $jahr
? " "
Next

Content-Key: 42904

Url: https://administrator.de/contentid/42904

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: 33425
33425 03.11.2006 um 19:27:05 Uhr
Goto Top
integrieren. (Call inventar.kix).

Das dürfte nur klappen wenn du es aus einem Kixtart Skript heraus ausgerufen wird.

Ich persönlich würde sydi-server (http://sourceforge.net/projects/sydi) bevorzugen, da es imho eleganter ist und auch eine Übersicht der verschiedenen Rechner mittels Excel/CSV unterstützt.

mfg
Schnitzelchen
Mitglied: gogoflash
gogoflash 03.11.2006 um 19:30:37 Uhr
Goto Top
Ja. Wie ich schon sagte, kann es in ein bestehendes Loginscript integriert werden.

Zudem sollte hier auch die Möglichkeiten von Kix gezeigt werden. Wie und ob man es so macht bleibt jedem selbst überlassen. Sicherlich gibt es bessere und umfangreichere Programme, die diese Aufgabe erfüllen können, hier ist die Frage wie man es mit KIX mitteln durchführt...

Gruß Miguel
Mitglied: Cornelius
Cornelius 14.12.2006 um 08:46:14 Uhr
Goto Top
Hi @all

ich hab ein bisschen am Script gespielt, und es aufgebessert, so dass jetzt wirklich alles aufgelistet wird, was mach braucht und überhaupt nicht benötigt, aber das ist jetzt egal. Denn das wichtigste ist, dass die Ausgabedatei weiter von einem Programm verarbeitet werden kann. Am besten seht ihr es euch selber an.

Ein Anliegen hätte ich trotzdem, ich fand bis jetzt noch keine Möglichkeit mit KiXtart direkt in eine Datenbank zu schreiben, gibt es eine Möglichkeit die Ausgabe z.B. in einen SQL-Server einzuspielen?

Erweiterungen:
- Drucker
- Laufwerke werden getrennt aufgelistet
- SID der Maschine
- MAC-Adresse von jeder Karte
- Komplette Softwareliste
- MS Office (2000/2003)


/* 
Computer information with KiXtart
Copyright (C) 2006  Schwarz Alexander

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
*/ 


    ; --- Globale Konfiguration --- 
    ; -- Anzeige Konfigurieren --
    $save_to_file = TRUE ; TRUE/FALSE    
    ; -- System Klasse -- 
    $objWMIService = GetObject( "winmgmts://./root/cimv2" )  
    
    
    ; --- Ausgabe ---
    If($save_to_file == TRUE)
      $SavePath = "C:\" + "\" + @WKSTA + ".txt"  
      $result=ReDirectOutput ($SavePath,1)
    Else
      CLS
      COLOR g+/n   
    EndIf


    ; --- Workstationname und Datum der Erfassung ---
    ; Header: benötigt für weitere bearbeitung
    
    ? "[HOSTNAME]"  
    ? @WKSTA 
    ?
    ? "[DATE]"  
    ? @DATE
    ?
    
    
    ; --- Benutzer-Informationen ---
    
    ? "[USER]"  
    ? "USERNAME=" + @USERID  
    ? "FULLNAME=" + @FULLNAME  
    ? "USERCOMMENT=" + @COMMENT  
    ? "USERSID=" + @SID      
    ? "USERLANG=" + @USERLANG  
    ? "PWAGE=" + @PWAGE  
    ? "MAXPWAGE=" + @MAXPWAGE  
    ? "LOGONDOMAIN=" + @LDOMAIN  
    ?
    
    
    ; --- Benutzer-Informationen - Gruppen ---
    ; Alle Gruppen des Benutzers incl. Domain-Gruppen
    
    ? "[USERGROUP]"  
    
    $iLoop = 0
    WHILE ENUMGROUP($iLoop)
      ? ENUMGROUP($iLoop)
      $iLoop = $iLoop + 1
    LOOP 
    ? 
    
    
    ; --- Workstation / Machine ---
    
    SELECT
      CASE @INWIN == 1
        $os = "Windows NT"  
      CASE @INWIN == 2
        $os = "Windows 9x"  
    ENDSELECT
    
    $objWMIService = GetObject("winmgmts:\\.\root\cimv2")  
    $colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem")  
    For Each $objItem in $colItems
      ; Datum auf deutsche Konvention umwandeln      
      $inst_date = left($objItem.InstallDate,8)
      $inst_jahr = left($inst_date,4)
      $inst_date = right($inst_date,4)
      $inst_monat = left($inst_date,2)
      $inst_tag = right($inst_date,2)
  
      $windir = $objItem.WindowsDirectory
      $install_date = $inst_tag + "." + $inst_monat + "." + $inst_jahr  
    Next
   
    ; SID der Maschine ermitteln
    $aSID = Split(@SID,"-")  
    
    $iLoop = 0
    For Each $element In $aSID
      $iLoop = $iLoop + 1
    Next
    $iLoop = $iLoop - 1
    
    $SID = Join($aSID,"-",$iLoop)  
    ; SID END
    
    ? "[MACHINE]"  
    ? "OS=" + $os  
    ? "WIN=" + @PRODUCTTYPE  
    ? "SP=" + @CSD  
    ? "HOSTNAME=" + @WKSTA  
    ? "DOMNAME=" + @HOSTNAME  
    ? "DOMAIN=" + @DOMAIN  
    ? "SYSLANG=" + @SYSLANG  
    ? "INSTDATE=" + $install_date   
    ? "WINDIR=" + $windir      
    ? "SID=" + $sid  
    ? 
   
    
    ; --- Motherboard / Mainboard ---
    
    $SystemInfo = GetObject("WinMgmts:").InstancesOf("Win32_Baseboard")  
    For Each $Item In $SystemInfo
      $producer = $Item.Manufacturer
      $typ = $Item.Product
    Next
    
    $SystemInfo = GetObject("WinMgmts:").InstancesOf("Win32_BIOS")  
    For Each $Item In $SystemInfo
      $bios = $Item.Name
      $biosver = $Item.SMBIOSBIOSVersion    
    Next
    
    ? "[MAINBOARD]"  
    ? "PRODUCER=" + $producer  
    ? "TYP=" + $typ  
    ? "BIOS=" + $bios  
    ? "BIOSVER=" + $biosver  
    ? 
    
    
    ; --- CPU / Prozessor ---
       
    $colItems = $objWMIService.ExecQuery( "Select * from Win32_Processor", "WQL", 48 )  
    $iLoop = 0
    For Each $objItem in $colItems
      ? "[CPU" + $iLoop + "]"  
      ? "NAME=" + Trim($objItem.Name)  
      ? "PRODUCER=" + $objItem.Manufacturer  
      ? "DESCRIPTION=" + $objItem.Description  
      ? "SPEED=" + $objItem.CurrentClockSpeed  
      ?
      $iLoop = $iLoop + 1
    Next
 
 
    ; --- RAM / Arbeitsspeicher ---
    
    $colItems = $objWMIService.ExecQuery( "Select * from Win32_PhysicalMemoryArray", "WQL", 48 )  
    For Each $objItem In $colItems
      $slots = $objItem.MemoryDevices
    Next
    
    $cntMod = 0
    $strMod = ""  
    $colItems = $objWMIService.ExecQuery( "Select * from Win32_PhysicalMemory", "WQL", 48 )  
    For Each $objItem In $colItems
      $cntMod = $cntMod + 1
      $strCap = ( Val( $objItem.Capacity ) + 1023 ) / ( 1024 * 1024 )
      $strMod = $strMod + "/" + $strCap  
    Next
    
    $colItems = $objWMIService.ExecQuery( "Select * from Win32_LogicalMemoryConfiguration", "WQL", 48 )  
      For Each $objItem In $colItems
        $total = ( $objItem.TotalPhysicalMemory + 1023 ) / 1024
      Next
    
    ? "[RAM]"  
    ? "SLOTS=" + $slots  
    ? "CHIP=" + $cntMod  
    ? "MODUL=" + SubStr($strMod,2)  
    ? "TOTAL=" + $total  
    ?
 
 
    ; --- HD / Festplatten ---
    
    $colItems = $objWMIService.ExecQuery( "Select * from Win32_DiskDrive Where SCSITargetId >= 0", "WQL", 48 )  
    $iLoop = 0
    For Each $objItem in $colItems
      ? "[HD" + $iLoop + "]"  
      ? "PRODUCER=" + $objItem.Manufacturer  
      ? "MODEL=" + $objItem.Model  
      ; Umrechnung auf GB
      $Size = $objItem.Size
      $LSize = Len($Size)
      $MSize = SubStr( $Size, 1, $LSize - 3 )
      $Size = ( 524288 + $MSize ) / 1048576
      ? "SIZE=" + $Size  
      ?
      $iLoop = $iLoop + 1
    Next
    
    
    ; --- Partitionierung ---
    
    $iLoopHD = 0
    $sysHD = ""  
    $iLoopFD = 0
    $sysFD = ""  
    $iLoopCD = 0
    $sysCD = ""  
    $iLoopNET = 0
    $sysNET = ""  
    
    $colItems = $objWMIService.ExecQuery("Select * from Win32_LogicalDisk")      
    For Each $objItem in $colItems
      ; -- HDs --
      If $objItem.Description == "Lokale Festplatte"  
        If $sysHD <> ""  
          $sysHD = $sysHD + @CRLF
        EndIf
        
        $sysHD = $sysHD + "[PARTITION" + $iLoopHD + "]" + @CRLF  
        $sysHD = $sysHD + "LETTER=" + $objItem.Caption + @CRLF  
        $sysHD = $sysHD + "NAME=" + $objItem.VolumeName + @CRLF  
        $sysHD = $sysHD + "DESCRIPTION=" + $objItem.Description + @CRLF  
        $sysHD = $sysHD + "SERIALNR=" + $objItem.VolumeSerialNumber + @CRLF      
        $sysHD = $sysHD + "FILESYSTEM=" + $objItem.FileSystem + @CRLF  
        
        $Size = $objItem.FreeSpace
        ; Umrechnung auf GB
        $LSize = Len( $Size )
        $MSize = SubStr( $Size, 1, $LSize - 3 )
        $Size = ( 524288 + $MSize ) / 1048576
        
        $sysHD = $sysHD + "FREE=" + $Size + @CRLF  
        
        $Size = $objItem.Size
        ; Umrechnung auf GB
        $LSize = Len( $Size )
        $MSize = SubStr( $Size, 1, $LSize - 3 )
        $Size = ( 524288 + $MSize ) / 1048576
        
        $sysHD = $sysHD + "SIZE=" + $Size + @CRLF  
 
        $iLoopHD = $iLoopHD + 1
      EndIf    
      
      ; -- Floppy --
      If $objItem.Description == "3,5 Zoll-Diskettenlaufwerk"  
        If $sysFD <> ""  
          $sysFD = $sysFD + @CRLF
        EndIf
        
        $sysFD = $sysFD + "[FLOPPY" + $iLoopFD + "]" + @CRLF  
        $sysFD = $sysFD + "LETTER=" + $objItem.Caption + @CRLF  
        $sysFD = $sysFD + "DESCRIPTION=" + $objItem.Description + @CRLF   
        
        $iLoopFD = $iLoopFD + 1
      EndIf
      
      ; -- CD Laufwerke --
      If $objItem.Description == "CD"  
        If $sysCD <> ""  
          $sysCD = $sysCD + @CRLF
        EndIf
        
        $sysCD = $sysCD + "[CDDRIVE" + $iLoopCD + "]" + @CRLF  
        $sysCD = $sysCD + "LETTER=" + $objItem.Caption + @CRLF          
        $sysCD = $sysCD + "DESCRIPTION=" + $objItem.Description + @CRLF  
 
        $iLoopCD = $iLoopCD + 1
      EndIf   
      
      ; -- Netzwerkverbindungen --
      If $objItem.Description == "Netzwerkverbindung"  
        If $sysNET <> ""  
          $sysNET = $sysNET + @CRLF
        EndIf
        
        $sysNET = $sysNET + "[NETDRIVE" + $iLoopNET + "]" + @CRLF  
        $sysNET = $sysNET + "LETTER=" + $objItem.Caption + @CRLF  
        $sysNET = $sysNET + "NAME=" + $objItem.VolumeName + @CRLF  
        $sysNET = $sysNET + "DESCRIPTION=" + $objItem.Description + @CRLF  
        $sysNET = $sysNET + "SERIALNR=" + $objItem.VolumeSerialNumber + @CRLF      
        $sysNET = $sysNET + "FILESYSTEM=" + $objItem.FileSystem + @CRLF  
        $sysNET = $sysNET + "PARH=" + $objItem.ProviderName + @CRLF  
 
        $iLoopNET = $iLoopNET + 1
      EndIf      
    Next  
    
    ? $sysHD 
    ? $sysFD
    ? $sysCD
    ? $sysNET
    
    
    ; --- Printer / Drucker ---
    
    $iCount = 0
    $colItems = $objWMIService.ExecQuery("Select * from Win32_Printer")  
    For Each $objItem In $colItems
      
      If $objItem.ServerName <> ""  
        $server = "SERVER=" + $objItem.ServerName  
      Else
        $server = "SERVER=LOCAL"  
      EndIf
      
      If $objItem.Default <> "0"  
        $default = "TRUE"  
      Else
        $default = "FALSE"  
      EndIf
      
      If $objItem.ShareName <> ""  
        $name = $objItem.ShareName
      Else
        $name = $objItem.Caption
      EndIf
      
      ? "[PRINTER" + $iCount + "]"  
      ? "NAME=" + $name  
      ? $server      
      ? "DRIVERNAME=" + $objItem.DriverName  
      ? "PORT=" + $objItem.PortName  
      ? "DEVICEID=" + $objItem.DeviceID  
      ? "LOCATION=" + $objItem.Location  
      ? "COMMENT=" + $objItem.Comment  
      ? "DEFAULT=" + $default  
      ? "HORIZONTAL=" + $objItem.HorizontalResolution  
      ? "VERTICAL=" + $objItem.VerticalResolution  
      ?
      
      $iCount = $iCount + 1
    Next
    
    
    ; --- Grafikkarte / Video
    
    $iCount = 0
    $colItems = $objWMIService.ExecQuery("Select * from Win32_VideoController")  
    For Each $objItem In $colItems
      $name = $objItem.Name
      
      $cpu = $objItem.VideoProcessor
      $ram = (($objItem.AdapterRAM + 524288) / 1048576)
      $description = Split($objItem.VideoModeDescription, " x ")  
      $driver = $ObjItem.DriverVersion
      $aufloesung = ""  
      
      $iLoop = 0
      For Each $element In $description
        SELECT
          CASE $iLoop == 0
            $aufloesung = $element
          CASE $iLoop == 1
            $aufloesung = $aufloesung + "x" + $element  
          CASE $iLoop == 2
            $farben = Split($element, " ")   
          CASE 1             
        ENDSELECT
        $iLoop = $iLoop + 1         
      Next 
      
      $iLoop = 0
      For Each $element In $farben
        If $iLoop == 0
          $farbe = $element        
        EndIf        
        $iLoop = $iLoop + 1
      Next
      
      If $name <> "Winvnc video hook driver"        
        ? "[VIDEO" + $iCount + "]"  
        ? "NAME=" + $name  
        ? "DRIVERVER=" + $driver  
        ? "CPU=" + $cpu  
        ? "RAM=" + $ram  
        ? "SOLUTION=" + $aufloesung  
        ? "COLOR=" + $farbe ; $farbe is string   
        ?
        
        $iCount = $iCount + 1
      EndIf      
    Next
  
   
    ; --- Soundkarte ---
    
    $colItems = $objWMIService.ExecQuery("Select * from Win32_SoundDevice")  
    For Each $objItem in $colItems
      $name = $objItem.Caption
      $producer = $objItem.Manufacturer
      
      ? "[SOUND]"  
      ? "NAME=" + $name  
      ? "PRODUCER=" + $producer  
      ?
    Next
    

    ; --- Netzwerkkarten ---       
    
    $iCount = 0
    For $iLoop = 0 To 9 Step 1
      If ENUMIPINFO($iLoop, 0, 1) <> "0.0.0.0" AND ENUMIPINFO($iLoop, 0, 1)  
        
        $name = ENUMIPINFO ($iLoop, 2, 1)        
        $macaddres = ""  
        
        $objWMIService = GetObject( "winmgmts://./root/cimv2" )  
        $colItems = $ObjWMIService.ExecQuery("SELECT Name,MACAddress From Win32_NetworkAdapter")          
        For Each $objItem In $colItems
          If $ObjItem.Name == $name
            $macaddres = $ObjItem.MACAddress                       
          EndIf                           
        Next
        
        $objWMIService = GetObject( "winmgmts://./root/WMI" )  
        $colItems = $objWMIService.ExecQuery( "SELECT * FROM MSNdis_EthernetCurrentAddress WHERE Active = True", "WQL", 48 )  
        For Each $objItem In $colItems        
          If $objItem.InstanceName == $name
            $col2Items = $objWMIService.ExecQuery("SELECT * FROM MSNdis_LinkSpeed WHERE InstanceName = '" + $objItem.InstanceName + "'", "WQL", 48 )  
          
            For Each $obj2Item In $col2Items              
                $speed = ($obj2Item.NdisLinkSpeed / 10 / 1000) ; MBit/s                        
            Next
          EndIf      
        Next
        
        ? "[NETWORK" + $iCount + "]"          
        ? "NAME=" + $name  
        ? "MACADDRES=" + $macaddres  
        ? "SPEED=" + $speed  
        ? "IPADDRES=" + ENUMIPINFO($iLoop, 0, 1)  
        ? "SUBNETMASK=" + ENUMIPINFO ($iLoop, 1, 1)  
        ? "GATEWAY=" + ENUMIPINFO ($iLoop, 3, 1)  
        ?
        
        $iCount = $iCount + 1
      EndIf
    Next
 
    
    ; --- Software ---
    
    $msoffice = ""  
    
    $iCount = 0    
    For $iLoop = 0 TO 2000 STEP 1
      $output = 0
      $KeyName = ENUMKEY("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $iLoop)  
      
      If @ERROR == 259 
        $iLoop = 2000 ; End
      EndIf
      
      If @ERROR == 0 AND $KeyName <> "NLSDownlevelMapping" AND $KeyName <> "IDNMitigationAPIs"        
          $name = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"DisplayName")  
          
          If @ERROR == 0
            $output = 1
          EndIF  
          
          $version = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"DisplayVersion")  
          $producer = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"Publisher")  
          $installdate = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"InstallDate")  
          $type = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"ReleaseType")  
          
          If $output == 1 AND $type <> "Hotfix"              
            ? "[SOFTWARE" + $iCount + "]"  
            ? "NAME=" + $name  
            ? "VERSION=" + $version  
            ? "PRODUCER=" + $producer  
            ? "INSTALLDATE=" + $installdate  
            ?
            
            OfficeCheck($name)
            $iCount = $iCount + 1
          EndIf                                        
      EndIf
      
      $name = ""  
      $version = ""  
      $producer = ""  
      $installdate = ""  
      
    Next
    
    
    ; --- Software / Office --- 
 
    If $msoffice <> ""  
    
      DIM $soft[9]
      DIM $value[9]
          
      $soft = "Word"  
      $soft[1] = "Excel"  
      $soft[2] = "PowerPoint"  
      $soft[3] = "Access"  
      $soft[4] = "InfoPath"  
      $soft[5] = "Publisher"  
      $soft[6] = "Outlook"  
      $soft[7] = "MS Project"  
      $soft[8] = "Visio"  
      
      For $iLoop = 0 TO 8 STEP 1
        IsInstall($msoffice,$soft[$iLoop])
        $value[$iLoop] = $return
      Next
            
      ? "[OFFICE]"  
      ? "VERSION="    + $msofficeversion  
      ? "WORD="       + $value  
      ? "EXCEL="      + $value[1]  
      ? "POWERPOINT=" + $value[2]  
      ? "ACCESS="     + $value[3]  
      ? "INFOPATH="   + $value[4]  
      ? "PUBLISHER="  + $value[5]  
      ? "OUTLOOK="    + $value[6]  
      ? "PROJECT="    + $value[7]  
      ? "VISIO="      + $value[8]  
      ?
      
    EndIf
    
   
    ; --- FUNCTIONS ---
    
    Function IsInstall($officeversion,$programm)
      If $officeversion == 9 AND $programm == Visio
        $Key = KeyExist("HKEY_LOCAL_MACHINE\SOFTWARE\Visio\Visio 2000")  
        If $Key
          $return = "TRUE"  
        Else
          $return = "FALSE"  
        EndIf
      Else
        $Key = KeyExist("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\" + $officeversion + ".0\" + $programm)  
        If $Key
          $return = "TRUE"  
        Else
          $return = "FALSE"  
        EndIf
      EndIf
    EndFunction 
    
    Function OfficeCheck($officename)
      If $officename == "Microsoft Office 2000 Premium"   
        $msoffice = 9
        $msofficeversion = "2000"  
      EndIf
      
      If $officename == "Visio 2000 (DE)"   
        $msoffice = 9
        $msofficeversion = "2000"  
      EndIf
      
      If $officename == "Microsoft Office Professional Edition 2003"   
        $msoffice = 11
        $msofficeversion = "2003"  
      EndIf
      
      If $officename == "Microsoft Office Project Professional 2003"  
        $msoffice = 11
        $msofficeversion = "2003"  
      EndIf
      
      If $officename == "Microsoft Office Visio Professional 2003"  
        $msoffice = 11
        $msofficeversion = "2003"  
      EndIf
    EndFunction 
    
Mitglied: 44800
44800 29.07.2009 um 10:35:18 Uhr
Goto Top
bei mir kommt in zeile 397 eine fehlermeldung bei folgendem code:

If ENUMIPINFO($iLoop, 0, 1) <> "0.0.0.0" AND ENUMIPINFO($iLoop, 0, 1)

fehlermeldung: ERROR : invalid method/function call: too many parameters!
Script: \\ex2003\netlogon\inventar.kix
Line : 397