Hardware und Software Inventarisierung mit KIX
24.10.2006
13:12:17 Uhr21940 Aufrufe
4 Antworten
13:12:17 Uhr
4 Antworten
Noch nicht bewertet
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.
http://www.administrator.de/Rechner_Inven ...
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.
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.
http://www.administrator.de/Rechner_Inven ...
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:"$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
;
?
;
$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;
$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
? " "
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
gogoflash schreibt am 03.11.2006 um 19:30:37 Uhr
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
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
Cornelius schreibt am 14.12.2006 um 08:46:14 Uhr
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)
01.
02.
/* 03.
Computer information with KiXtart 04.
Copyright (C) 2006 Schwarz Alexander 05.
06.
This program is free software; you can redistribute it and/or 07.
modify it under the terms of the GNU General Public License 08.
as published by the Free Software Foundation; either version 2 09.
of the License, or any later version. 10.
11.
This program is distributed in the hope that it will be useful, 12.
but WITHOUT ANY WARRANTY; without even the implied warranty of 13.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14.
GNU General Public License for more details. 15.
16.
You should have received a copy of the GNU General Public License 17.
along with this program; if not, write to the Free Software 18.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 19.
*/ 20.
21.
22.
; --- Globale Konfiguration --- 23.
; -- Anzeige Konfigurieren -- 24.
$save_to_file = TRUE ; TRUE/FALSE 25.
; -- System Klasse -- 26.
$objWMIService = GetObject( "winmgmts://./root/cimv2" ) 27.
28.
29.
; --- Ausgabe --- 30.
If($save_to_file == TRUE) 31.
$SavePath = "C:\" + "\" + @WKSTA + ".txt" 32.
$result=ReDirectOutput ($SavePath,1) 33.
Else 34.
CLS 35.
COLOR g+/n 36.
EndIf 37.
38.
39.
; --- Workstationname und Datum der Erfassung --- 40.
; Header: benötigt für weitere bearbeitung 41.
42.
? "[HOSTNAME]" 43.
? @WKSTA 44.
? 45.
? "[DATE]" 46.
? @DATE 47.
? 48.
49.
50.
; --- Benutzer-Informationen --- 51.
52.
? "[USER]" 53.
? "USERNAME=" + @USERID 54.
? "FULLNAME=" + @FULLNAME 55.
? "USERCOMMENT=" + @COMMENT 56.
? "USERSID=" + @SID 57.
? "USERLANG=" + @USERLANG 58.
? "PWAGE=" + @PWAGE 59.
? "MAXPWAGE=" + @MAXPWAGE 60.
? "LOGONDOMAIN=" + @LDOMAIN 61.
? 62.
63.
64.
; --- Benutzer-Informationen - Gruppen --- 65.
; Alle Gruppen des Benutzers incl. Domain-Gruppen 66.
67.
? "[USERGROUP]" 68.
69.
$iLoop = 0 70.
WHILE ENUMGROUP($iLoop) 71.
? ENUMGROUP($iLoop) 72.
$iLoop = $iLoop + 1 73.
LOOP 74.
? 75.
76.
77.
; --- Workstation / Machine --- 78.
79.
SELECT 80.
CASE @INWIN == 1 81.
$os = "Windows NT" 82.
CASE @INWIN == 2 83.
$os = "Windows 9x" 84.
ENDSELECT 85.
86.
$objWMIService = GetObject("winmgmts:\\.\root\cimv2") 87.
$colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem") 88.
For Each $objItem in $colItems 89.
; Datum auf deutsche Konvention umwandeln 90.
$inst_date = left($objItem.InstallDate,8) 91.
$inst_jahr = left($inst_date,4) 92.
$inst_date = right($inst_date,4) 93.
$inst_monat = left($inst_date,2) 94.
$inst_tag = right($inst_date,2) 95.
96.
$windir = $objItem.WindowsDirectory 97.
$install_date = $inst_tag + "." + $inst_monat + "." + $inst_jahr 98.
Next 99.
100.
; SID der Maschine ermitteln 101.
$aSID = Split(@SID,"-") 102.
103.
$iLoop = 0 104.
For Each $element In $aSID 105.
$iLoop = $iLoop + 1 106.
Next 107.
$iLoop = $iLoop - 1 108.
109.
$SID = Join($aSID,"-",$iLoop) 110.
; SID END 111.
112.
? "[MACHINE]" 113.
? "OS=" + $os 114.
? "WIN=" + @PRODUCTTYPE 115.
? "SP=" + @CSD 116.
? "HOSTNAME=" + @WKSTA 117.
? "DOMNAME=" + @HOSTNAME 118.
? "DOMAIN=" + @DOMAIN 119.
? "SYSLANG=" + @SYSLANG 120.
? "INSTDATE=" + $install_date 121.
? "WINDIR=" + $windir 122.
? "SID=" + $sid 123.
? 124.
125.
126.
; --- Motherboard / Mainboard --- 127.
128.
$SystemInfo = GetObject("WinMgmts:").InstancesOf("Win32_Baseboard") 129.
For Each $Item In $SystemInfo 130.
$producer = $Item.Manufacturer 131.
$typ = $Item.Product 132.
Next 133.
134.
$SystemInfo = GetObject("WinMgmts:").InstancesOf("Win32_BIOS") 135.
For Each $Item In $SystemInfo 136.
$bios = $Item.Name 137.
$biosver = $Item.SMBIOSBIOSVersion 138.
Next 139.
140.
? "[MAINBOARD]" 141.
? "PRODUCER=" + $producer 142.
? "TYP=" + $typ 143.
? "BIOS=" + $bios 144.
? "BIOSVER=" + $biosver 145.
? 146.
147.
148.
; --- CPU / Prozessor --- 149.
150.
$colItems = $objWMIService.ExecQuery( "Select * from Win32_Processor", "WQL", 48 ) 151.
$iLoop = 0 152.
For Each $objItem in $colItems 153.
? "[CPU" + $iLoop + "]" 154.
? "NAME=" + Trim($objItem.Name) 155.
? "PRODUCER=" + $objItem.Manufacturer 156.
? "DESCRIPTION=" + $objItem.Description 157.
? "SPEED=" + $objItem.CurrentClockSpeed 158.
? 159.
$iLoop = $iLoop + 1 160.
Next 161.
162.
163.
; --- RAM / Arbeitsspeicher --- 164.
165.
$colItems = $objWMIService.ExecQuery( "Select * from Win32_PhysicalMemoryArray", "WQL", 48 ) 166.
For Each $objItem In $colItems 167.
$slots = $objItem.MemoryDevices 168.
Next 169.
170.
$cntMod = 0 171.
$strMod = "" 172.
$colItems = $objWMIService.ExecQuery( "Select * from Win32_PhysicalMemory", "WQL", 48 ) 173.
For Each $objItem In $colItems 174.
$cntMod = $cntMod + 1 175.
$strCap = ( Val( $objItem.Capacity ) + 1023 ) / ( 1024 * 1024 ) 176.
$strMod = $strMod + "/" + $strCap 177.
Next 178.
179.
$colItems = $objWMIService.ExecQuery( "Select * from Win32_LogicalMemoryConfiguration", "WQL", 48 ) 180.
For Each $objItem In $colItems 181.
$total = ( $objItem.TotalPhysicalMemory + 1023 ) / 1024 182.
Next 183.
184.
? "[RAM]" 185.
? "SLOTS=" + $slots 186.
? "CHIP=" + $cntMod 187.
? "MODUL=" + SubStr($strMod,2) 188.
? "TOTAL=" + $total 189.
? 190.
191.
192.
; --- HD / Festplatten --- 193.
194.
$colItems = $objWMIService.ExecQuery( "Select * from Win32_DiskDrive Where SCSITargetId >= 0", "WQL", 48 ) 195.
$iLoop = 0 196.
For Each $objItem in $colItems 197.
? "[HD" + $iLoop + "]" 198.
? "PRODUCER=" + $objItem.Manufacturer 199.
? "MODEL=" + $objItem.Model 200.
; Umrechnung auf GB 201.
$Size = $objItem.Size 202.
$LSize = Len($Size) 203.
$MSize = SubStr( $Size, 1, $LSize - 3 ) 204.
$Size = ( 524288 + $MSize ) / 1048576 205.
? "SIZE=" + $Size 206.
? 207.
$iLoop = $iLoop + 1 208.
Next 209.
210.
211.
; --- Partitionierung --- 212.
213.
$iLoopHD = 0 214.
$sysHD = "" 215.
$iLoopFD = 0 216.
$sysFD = "" 217.
$iLoopCD = 0 218.
$sysCD = "" 219.
$iLoopNET = 0 220.
$sysNET = "" 221.
222.
$colItems = $objWMIService.ExecQuery("Select * from Win32_LogicalDisk") 223.
For Each $objItem in $colItems 224.
; -- HDs -- 225.
If $objItem.Description == "Lokale Festplatte" 226.
If $sysHD <> "" 227.
$sysHD = $sysHD + @CRLF 228.
EndIf 229.
230.
$sysHD = $sysHD + "[PARTITION" + $iLoopHD + "]" + @CRLF 231.
$sysHD = $sysHD + "LETTER=" + $objItem.Caption + @CRLF 232.
$sysHD = $sysHD + "NAME=" + $objItem.VolumeName + @CRLF 233.
$sysHD = $sysHD + "DESCRIPTION=" + $objItem.Description + @CRLF 234.
$sysHD = $sysHD + "SERIALNR=" + $objItem.VolumeSerialNumber + @CRLF 235.
$sysHD = $sysHD + "FILESYSTEM=" + $objItem.FileSystem + @CRLF 236.
237.
$Size = $objItem.FreeSpace 238.
; Umrechnung auf GB 239.
$LSize = Len( $Size ) 240.
$MSize = SubStr( $Size, 1, $LSize - 3 ) 241.
$Size = ( 524288 + $MSize ) / 1048576 242.
243.
$sysHD = $sysHD + "FREE=" + $Size + @CRLF 244.
245.
$Size = $objItem.Size 246.
; Umrechnung auf GB 247.
$LSize = Len( $Size ) 248.
$MSize = SubStr( $Size, 1, $LSize - 3 ) 249.
$Size = ( 524288 + $MSize ) / 1048576 250.
251.
$sysHD = $sysHD + "SIZE=" + $Size + @CRLF 252.
253.
$iLoopHD = $iLoopHD + 1 254.
EndIf 255.
256.
; -- Floppy -- 257.
If $objItem.Description == "3,5 Zoll-Diskettenlaufwerk" 258.
If $sysFD <> "" 259.
$sysFD = $sysFD + @CRLF 260.
EndIf 261.
262.
$sysFD = $sysFD + "[FLOPPY" + $iLoopFD + "]" + @CRLF 263.
$sysFD = $sysFD + "LETTER=" + $objItem.Caption + @CRLF 264.
$sysFD = $sysFD + "DESCRIPTION=" + $objItem.Description + @CRLF 265.
266.
$iLoopFD = $iLoopFD + 1 267.
EndIf 268.
269.
; -- CD Laufwerke -- 270.
If $objItem.Description == "CD" 271.
If $sysCD <> "" 272.
$sysCD = $sysCD + @CRLF 273.
EndIf 274.
275.
$sysCD = $sysCD + "[CDDRIVE" + $iLoopCD + "]" + @CRLF 276.
$sysCD = $sysCD + "LETTER=" + $objItem.Caption + @CRLF 277.
$sysCD = $sysCD + "DESCRIPTION=" + $objItem.Description + @CRLF 278.
279.
$iLoopCD = $iLoopCD + 1 280.
EndIf 281.
282.
; -- Netzwerkverbindungen -- 283.
If $objItem.Description == "Netzwerkverbindung" 284.
If $sysNET <> "" 285.
$sysNET = $sysNET + @CRLF 286.
EndIf 287.
288.
$sysNET = $sysNET + "[NETDRIVE" + $iLoopNET + "]" + @CRLF 289.
$sysNET = $sysNET + "LETTER=" + $objItem.Caption + @CRLF 290.
$sysNET = $sysNET + "NAME=" + $objItem.VolumeName + @CRLF 291.
$sysNET = $sysNET + "DESCRIPTION=" + $objItem.Description + @CRLF 292.
$sysNET = $sysNET + "SERIALNR=" + $objItem.VolumeSerialNumber + @CRLF 293.
$sysNET = $sysNET + "FILESYSTEM=" + $objItem.FileSystem + @CRLF 294.
$sysNET = $sysNET + "PARH=" + $objItem.ProviderName + @CRLF 295.
296.
$iLoopNET = $iLoopNET + 1 297.
EndIf 298.
Next 299.
300.
? $sysHD 301.
? $sysFD 302.
? $sysCD 303.
? $sysNET 304.
305.
306.
; --- Printer / Drucker --- 307.
308.
$iCount = 0 309.
$colItems = $objWMIService.ExecQuery("Select * from Win32_Printer") 310.
For Each $objItem In $colItems 311.
312.
If $objItem.ServerName <> "" 313.
$server = "SERVER=" + $objItem.ServerName 314.
Else 315.
$server = "SERVER=LOCAL" 316.
EndIf 317.
318.
If $objItem.Default <> "0" 319.
$default = "TRUE" 320.
Else 321.
$default = "FALSE" 322.
EndIf 323.
324.
If $objItem.ShareName <> "" 325.
$name = $objItem.ShareName 326.
Else 327.
$name = $objItem.Caption 328.
EndIf 329.
330.
? "[PRINTER" + $iCount + "]" 331.
? "NAME=" + $name 332.
? $server 333.
? "DRIVERNAME=" + $objItem.DriverName 334.
? "PORT=" + $objItem.PortName 335.
? "DEVICEID=" + $objItem.DeviceID 336.
? "LOCATION=" + $objItem.Location 337.
? "COMMENT=" + $objItem.Comment 338.
? "DEFAULT=" + $default 339.
? "HORIZONTAL=" + $objItem.HorizontalResolution 340.
? "VERTICAL=" + $objItem.VerticalResolution 341.
? 342.
343.
$iCount = $iCount + 1 344.
Next 345.
346.
347.
; --- Grafikkarte / Video 348.
349.
$iCount = 0 350.
$colItems = $objWMIService.ExecQuery("Select * from Win32_VideoController") 351.
For Each $objItem In $colItems 352.
$name = $objItem.Name 353.
354.
$cpu = $objItem.VideoProcessor 355.
$ram = (($objItem.AdapterRAM + 524288) / 1048576) 356.
$description = Split($objItem.VideoModeDescription, " x ") 357.
$driver = $ObjItem.DriverVersion 358.
$aufloesung = "" 359.
360.
$iLoop = 0 361.
For Each $element In $description 362.
SELECT 363.
CASE $iLoop == 0 364.
$aufloesung = $element 365.
CASE $iLoop == 1 366.
$aufloesung = $aufloesung + "x" + $element 367.
CASE $iLoop == 2 368.
$farben = Split($element, " ") 369.
CASE 1 370.
ENDSELECT 371.
$iLoop = $iLoop + 1 372.
Next 373.
374.
$iLoop = 0 375.
For Each $element In $farben 376.
If $iLoop == 0 377.
$farbe = $element 378.
EndIf 379.
$iLoop = $iLoop + 1 380.
Next 381.
382.
If $name <> "Winvnc video hook driver" 383.
? "[VIDEO" + $iCount + "]" 384.
? "NAME=" + $name 385.
? "DRIVERVER=" + $driver 386.
? "CPU=" + $cpu 387.
? "RAM=" + $ram 388.
? "SOLUTION=" + $aufloesung 389.
? "COLOR=" + $farbe ; $farbe is string 390.
? 391.
392.
$iCount = $iCount + 1 393.
EndIf 394.
Next 395.
396.
397.
; --- Soundkarte --- 398.
399.
$colItems = $objWMIService.ExecQuery("Select * from Win32_SoundDevice") 400.
For Each $objItem in $colItems 401.
$name = $objItem.Caption 402.
$producer = $objItem.Manufacturer 403.
404.
? "[SOUND]" 405.
? "NAME=" + $name 406.
? "PRODUCER=" + $producer 407.
? 408.
Next 409.
410.
411.
; --- Netzwerkkarten --- 412.
413.
$iCount = 0 414.
For $iLoop = 0 To 9 Step 1 415.
If ENUMIPINFO($iLoop, 0, 1) <> "0.0.0.0" AND ENUMIPINFO($iLoop, 0, 1) 416.
417.
$name = ENUMIPINFO ($iLoop, 2, 1) 418.
$macaddres = "" 419.
420.
$objWMIService = GetObject( "winmgmts://./root/cimv2" ) 421.
$colItems = $ObjWMIService.ExecQuery("SELECT Name,MACAddress From Win32_NetworkAdapter") 422.
For Each $objItem In $colItems 423.
If $ObjItem.Name == $name 424.
$macaddres = $ObjItem.MACAddress 425.
EndIf 426.
Next 427.
428.
$objWMIService = GetObject( "winmgmts://./root/WMI" ) 429.
$colItems = $objWMIService.ExecQuery( "SELECT * FROM MSNdis_EthernetCurrentAddress WHERE Active = True", "WQL", 48 ) 430.
For Each $objItem In $colItems 431.
If $objItem.InstanceName == $name 432.
$col2Items = $objWMIService.ExecQuery("SELECT * FROM MSNdis_LinkSpeed WHERE InstanceName = '" + $objItem.InstanceName + "'", "WQL", 48 ) 433.
434.
For Each $obj2Item In $col2Items 435.
$speed = ($obj2Item.NdisLinkSpeed / 10 / 1000) ; MBit/s 436.
Next 437.
EndIf 438.
Next 439.
440.
? "[NETWORK" + $iCount + "]" 441.
? "NAME=" + $name 442.
? "MACADDRES=" + $macaddres 443.
? "SPEED=" + $speed 444.
? "IPADDRES=" + ENUMIPINFO($iLoop, 0, 1) 445.
? "SUBNETMASK=" + ENUMIPINFO ($iLoop, 1, 1) 446.
? "GATEWAY=" + ENUMIPINFO ($iLoop, 3, 1) 447.
? 448.
449.
$iCount = $iCount + 1 450.
EndIf 451.
Next 452.
453.
454.
; --- Software --- 455.
456.
$msoffice = "" 457.
458.
$iCount = 0 459.
For $iLoop = 0 TO 2000 STEP 1 460.
$output = 0 461.
$KeyName = ENUMKEY("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $iLoop) 462.
463.
If @ERROR == 259 464.
$iLoop = 2000 ; End 465.
EndIf 466.
467.
If @ERROR == 0 AND $KeyName <> "NLSDownlevelMapping" AND $KeyName <> "IDNMitigationAPIs" 468.
$name = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"DisplayName") 469.
470.
If @ERROR == 0 471.
$output = 1 472.
EndIF 473.
474.
$version = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"DisplayVersion") 475.
$producer = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"Publisher") 476.
$installdate = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"InstallDate") 477.
$type = ReadValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $KeyName,"ReleaseType") 478.
479.
If $output == 1 AND $type <> "Hotfix" 480.
? "[SOFTWARE" + $iCount + "]" 481.
? "NAME=" + $name 482.
? "VERSION=" + $version 483.
? "PRODUCER=" + $producer 484.
? "INSTALLDATE=" + $installdate 485.
? 486.
487.
OfficeCheck($name) 488.
$iCount = $iCount + 1 489.
EndIf 490.
EndIf 491.
492.
$name = "" 493.
$version = "" 494.
$producer = "" 495.
$installdate = "" 496.
497.
Next 498.
499.
500.
; --- Software / Office --- 501.
502.
If $msoffice <> "" 503.
504.
DIM $soft[9] 505.
DIM $value[9] 506.
507.
$soft[0] = "Word" 508.
$soft[1] = "Excel" 509.
$soft[2] = "PowerPoint" 510.
$soft[3] = "Access" 511.
$soft[4] = "InfoPath" 512.
$soft[5] = "Publisher" 513.
$soft[6] = "Outlook" 514.
$soft[7] = "MS Project" 515.
$soft[8] = "Visio" 516.
517.
For $iLoop = 0 TO 8 STEP 1 518.
IsInstall($msoffice,$soft[$iLoop]) 519.
$value[$iLoop] = $return 520.
Next 521.
522.
? "[OFFICE]" 523.
? "VERSION=" + $msofficeversion 524.
? "WORD=" + $value[0] 525.
? "EXCEL=" + $value[1] 526.
? "POWERPOINT=" + $value[2] 527.
? "ACCESS=" + $value[3] 528.
? "INFOPATH=" + $value[4] 529.
? "PUBLISHER=" + $value[5] 530.
? "OUTLOOK=" + $value[6] 531.
? "PROJECT=" + $value[7] 532.
? "VISIO=" + $value[8] 533.
? 534.
535.
EndIf 536.
537.
538.
; --- FUNCTIONS --- 539.
540.
Function IsInstall($officeversion,$programm) 541.
If $officeversion == 9 AND $programm == Visio 542.
$Key = KeyExist("HKEY_LOCAL_MACHINE\SOFTWARE\Visio\Visio 2000") 543.
If $Key 544.
$return = "TRUE" 545.
Else 546.
$return = "FALSE" 547.
EndIf 548.
Else 549.
$Key = KeyExist("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\" + $officeversion + ".0\" + $programm) 550.
If $Key 551.
$return = "TRUE" 552.
Else 553.
$return = "FALSE" 554.
EndIf 555.
EndIf 556.
EndFunction 557.
558.
Function OfficeCheck($officename) 559.
If $officename == "Microsoft Office 2000 Premium" 560.
$msoffice = 9 561.
$msofficeversion = "2000" 562.
EndIf 563.
564.
If $officename == "Visio 2000 (DE)" 565.
$msoffice = 9 566.
$msofficeversion = "2000" 567.
EndIf 568.
569.
If $officename == "Microsoft Office Professional Edition 2003" 570.
$msoffice = 11 571.
$msofficeversion = "2003" 572.
EndIf 573.
574.
If $officename == "Microsoft Office Project Professional 2003" 575.
$msoffice = 11 576.
$msofficeversion = "2003" 577.
EndIf 578.
579.
If $officename == "Microsoft Office Visio Professional 2003" 580.
$msoffice = 11 581.
$msofficeversion = "2003" 582.
EndIf 583.
EndFunction 584.
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










33425schreibt am 03.11.2006 um 19:27:05 Uhr44800schreibt am 29.07.2009 um 10:35:18 Uhr