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.
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
$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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 42904
Url: https://administrator.de/tutorial/hardware-und-software-inventarisierung-mit-kix-42904.html
Ausgedruckt am: 22.12.2024 um 13:12 Uhr
4 Kommentare
Neuester Kommentar
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
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)
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
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
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