Script (sys2wiki.vbs) um Hardware Infos unter Windows in DokuWiki kompatiblen Format auszulesen.
' *********************************************************
' VERSION: 0.2
' CREATED: 01.07.2007
' LAST UPDATED: 05.07.2007
' AUTHOR: Karsten Schoeke
' DECRIPTION: Das Script scannt das System und gibt die Infos
' im Dokuwiki-Format aus.
' Nach dem Durchlauf oeffnet notepad und die Infos koennen
' direkt ins Wiki kopiert werden.
' PARAMS: /H Hostname (optional, default localhost) remote only for administrators
' /F Filename (optional, default hostinfo.txt)
' /U Username (for emailaddress, default username)
' /? Help
'
' *********************************************************
' Variablen und Constanten definieren
Const strHL = "===="
Dim strFileName, strDateiname, strComputername, strUserName, strUserDomainName
Dim strHWSerialNumber, strHWReleaseDate
Dim strHWManufacturer, strHWModel, strHWTotalPhysicalMemory
Dim strHostname, strOperatingsystem, strServicepack, strManufacturer
Dim intCPUnumber, strCPUname, strCPUspeed
Dim strPFFileSize
Dim strMACAddress, strNICName, strIPAddress, strNIC
Dim strPCI, strIDE, strSCSI
Dim strDisk
' Alle parameter auslesen
Do While i < Wscript.Arguments.Count
' Hostname
If Ucase(WScript.Arguments(i)) = "/H" or Ucase(WScript.Arguments(i)) = "-H" then
i = i + 1
strComputername = WScript.Arguments(i)
' Textfile
ElseIf WScript.Arguments(i) = "/F" or WScript.Arguments(i) = "-F" Then
i = i + 1
strFileName = WScript.Arguments(i)
' Username
ElseIf WScript.Arguments(i) = "/U" or WScript.Arguments(i) = "-U" Then
i = i + 1
strUserName = WScript.Arguments(i)
ElseIf WScript.Arguments(i) = "/?" or WScript.Arguments(i) = "-?" Then
Call About()
WScript.Quit(1)
End If
i = i+1
Loop
'Computername ermitteln
Dim objWSHShell : Set objWSHShell = WScript.CreateObject("WScript.Shell")
Dim objEnv : Set objEnv = objWSHShell.Environment("Process")
If Len(strComputername) = 0 Then strComputername = objEnv("COMPUTERNAME")
If Len (strUserName) = 0 Then strUsername = objEnv("USERNAME")
strUserDomainName = objEnv("USERDNSDOMAIN")
' Dokuwiki File festlegen
Dim objFs : Set objFs = WScript.CreateObject("Scripting.FileSystemObject")
If Len(strFileName) = 0 Then strFilename = "hostinfo.txt"
strDateiname = objFs.GetBaseName(strFileName)
' WMI
Dim objWMI : Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputerName & "/root/cimv2")
'BIOS-Infos ermitteln
wql = "select Manufacturer, SerialNumber, ReleaseDate from Win32_BIOS"
Set HWSet = objWMI.ExecQuery(wql)
For each HW in HWSet
strHWSerialNumber = HW.SerialNumber
'leeren String abfangen
If (InStr(HW.ReleaseDate,"000") => 1) Then
strHWReleaseDate = WMIDateStringToDate(HW.ReleaseDate)
End If
If Len(strHWReleaseDate) = 0 Then strHWReleaseDate = "unbekannt"
Next
'WEITERE Hardwareinfos ermitteln
wql = "select Manufacturer, Model, TotalPhysicalMemory from Win32_ComputerSystem"
Set HWSet = objWMI.ExecQuery(wql)
For each HW in HWSet
strHWManufacturer = HW.Manufacturer
strHWModel = HW.Model
strHWTotalPhysicalMemory = ChangeMemorySize(HW.TotalPhysicalMemory)
Next
'Informationen über das OS ermitteln
wql = "select CSName, Caption, Version, BuildNumber, CSDVersion, Manufacturer from Win32_OperatingSystem"
Set OSSet = objWMI.ExecQuery(wql)
For each OS in OSSet
strHostname = OS.CSName
strOperatingsystem = OS.Caption & " - " & OS.Version & " - " & OS.BuildNumber
strServicepack = OS.CSDVersion
strManufacturer = OS.Manufacturer
If Len(strServicepack) = 0 Then strServicepack = "ohne Servicepack"
Next
'CPU Infos ermitteln
wql = "select Name, CurrentClockSpeed from Win32_Processor"
Set CPUSet = objWMI.ExecQuery(wql)
For each CPU in CPUSet
intCPUnumber = intCPUnumber + 1
strCPUname = LTrim(CPU.Name)
strCPUspeed = CPU.CurrentClockSpeed
Next
'Pagefileinfos ermitteln
wql = "select FileSize from Win32_PageFile"
Set PFSet = objWMI.ExecQuery(wql)
For each PF in PFSet
strPFFileSize = ChangeMemorySize(PF.Filesize)
Next
'NIC Infos ermitteln
wql = "select * from Win32_NetworkAdapter"
Set NICSet = objWMI.ExecQuery(wql)
For each NIC in NICSet
If (NIC.AdapterType = "Ethernet 802.3") Then
If InStr(NIC.ProductName,"Paketplaner")=0 And InStr(NIC.ProductName,"1394")=0 and InStr(NIC.ProductName,"Net6")=0 Then
strMACAddress = NIC.MACAddress
strNICName = NIC.ProductName
'I/P Configuration für aktuelle card ermitteln
twql = "select * from Win32_NetworkAdapterConfiguration where IPEnabled = True and Index = " & NIC.Index
Set IPSet = objWMI.ExecQuery(twql)
For each IP in IPSet
If not IsEmpty(IP.IPAddress) Then strIPAddress = Join(IP.IPAddress, ",")
Next
strNIC = strNIC & "| " & NIC.ProductName & " | " & strIPAddress & " | " & NIC.MACAddress & " | " & vbCrLf
End If
End If
Next
'Devices auslesen
wql = "select * from Win32_pnpEntity"
Set DeviceSet = objWMI.ExecQuery(wql)
For each Device in DeviceSet
'nur PCI Geraete und keine Standardsystemgeraete auflisten
If (InStr(Device.DeviceID,"PCI\")=1) and (InStr(Device.Manufacturer,"Standard")=0) Then
strPCI = strPCI & "| " & Device.Manufacturer & " | " & Device.Name & " | " & vbCrLf
End If
'nur IDE Geraete auflisten
If (InStr(Device.DeviceID,"IDE\")=1) Then
strIDE = strIDE & "| " & Device.Description & " | " & Device.Name & " | " & vbCrLf
End If
'nur SCSI Geraete auflisten
If (InStr(Device.DeviceID,"SCSI\")=1) Then
strSCSI = strSCSI & "| " & Device.Description & " | " & Device.Name & " | " & vbCrLf
End If
Next
'lokales Filesystem auslesen
wql = "select * from Win32_LogicalDisk"
Set DiskSet = objWMI.ExecQuery(wql)
For each Disk in DiskSet
'nur lokale Festplatten auflisten
If (InStr(Disk.Description,"Lo")=1) Then
strDisk = strDisk & "| " & Disk.DeviceID & " | " & Disk.FileSystem & " | " & ChangeDiskSize(Disk.Size) & " | " & vbCrLf
End If
Next
' Informationen in WikiDatei schreiben
Dim wikifile : Set wikifile = objFs.CreateTextFile(strDateiname, True)
' Beginne mit General
wikifile.WriteLine strHL & " General " & strHL
wikifile.WriteLine "^ Hostname | " & strHostname & "." & strUserDomainName & " | "
wikifile.WriteLine "^ Hersteller | " & strHWManufacturer & " - " & strHWModel & " | "
wikifile.WriteLine "^ Seriennummer | " & strHWSerialNumber & " | "
wikifile.WriteLine "^ BIOS Release | " & strHWReleaseDate & " | "
wikifile.WriteLine "^ CPU | " & strCPUname & " | "
wikifile.WriteLine "^ MHZ | " & strCPUspeed & " Mhz | "
wikifile.WriteLine "^ # CPU Core | " & intCPUnumber & " | "
wikifile.WriteLine "^ RAM | " & strHWTotalPhysicalMemory & " | "
wikifile.WriteLine "^ Auslagerungsdatei | " & strPFFileSize & " | "
wikifile.WriteLine "^ System | " & strManufacturer & " | "
wikifile.WriteLine "^ OS | " & strOperatingsystem & " | "
wikifile.WriteLine "^ Servicepack | " & strServicepack & " | "
wikifile.WriteLine " "
wikifile.WriteLine "verantwortlich: <" & strUserName & "@" & strUserDomainName & ">"
wikifile.WriteLine " "
' weiter mit network info's
wikifile.WriteLine strHL & " Network " & strHL
wikifile.WriteLine "^ Name ^ IP-Adresse ^ MAC-Adresse ^"
wikifile.Write strNIC
' weiter mit PCI-Bus info's
wikifile.WriteLine strHL & " PCI Bus Hardware " & strHL
wikifile.WriteLine "^ Hersteller ^ Details ^"
wikifile.Write strPCI
' weiter mit dem Filesystem
wikifile.WriteLine strHL & " Filesystem " & strHL
wikifile.WriteLine "^ Name ^ Type ^ Groesse ^"
wikifile.Write strDisk
' weiter mit den IDE Devices
If not(IsEmpty(strIDE)) Then
wikifile.WriteLine strHL & " IDE Devices " & strHL
wikifile.WriteLine "^ Typ ^ Details ^"
wikifile.Write strIDE
End If
' weiter mit SCSI Devices
If not(IsEmpty(strSCSI)) Then
wikifile.WriteLine strHL & " SCSI Devices " & strHL
wikifile.WriteLine "^ Typ ^ Details ^"
wikifile.Write strSCSI
End If
'Wiki Datei anzeigen
objWSHShell.run "notepad """ & strDateiname & """" , , True
' Ausgabefile schliessen Objekte terminieren
wikifile.Close
Set objWSHShell = Nothing
Set objEnv = Nothing
Set objFs = Nothing
Set objWMI = Nothing
Set wikifile = Nothing
'**************************************************************'
' Functionen '
'**************************************************************'
Function About
WScript.Echo "sys2wiki Script by Karsten Schoeke <karsten.schoeke(at)geobasis-bb.de>" & vbLF & vbLF & _
"Usage: sys2wiki.vbs [/H] [/F [/?]" & vbLF & _
" /H - Hostname (default localhost) remote only for administrators" & vbLF & _
" /F - Filename for wikifile (default hostinfo.txt)" & vbLF & _
" /U - Username for emailaddress, only for remote access" & vbLF & _
" /? - This message"
End Function
'Formatieren des WMI Datumsformat
Function WMIDateStringToDate(dtmDate)
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
& " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))
End Function
'Umrechnen von Bits nach MB, GB, usw. incl. Format der Ausgabe
Function ChangeMemorySize(MemorySize)
Dim intMemorySize
If MemorySize >= 1000000000 Then
intMemorySize = CLng(MemorySize/1000000000)
ChangeMemorySize = CStr(intMemorySize) & " GB"
ElseIf MemorySize >= 1000000 Then
intMemorySize = CLng(MemorySize/1000000)
ChangeMemorySize = CStr(intMemorySize) & " MB"
Else
intMemorySize= CLng(MemorySize/100)
ChangeMemorySize = CStr(intMemorySize) & " kB"
End if
End Function
'Umrechnen von Bits nach MByte, GByte, usw. incl. Format der Ausgabe
Function ChangeDiskSize(DiskSize)
Dim intDiskSize
If DiskSize >= 1099511627776 Then
intDiskSize = CLng(DiskSize/1099511627776)
ChangeDiskSize = CStr(intDiskSize) & " TByte"
ElseIf DiskSize >= 1073741824 Then
intDiskSize = CLng(DiskSize/1073741824)
ChangeDiskSize = CStr(intDiskSize) & " GByte"
ElseIf DiskSize >= 1048576 Then
intDiskSize = CLng(DiskSize/1048576)
ChangeDiskSize = CStr(intDiskSize) & " MByte"
Else
intDiskSize= CLng(DiskSize/1024)
ChangeDiskSize = CStr(intDiskSize) & " kByte"
End if
End Function
Das Script kann man z.B wie folgt aufrufen
%windir%\System32\runas.exe /user:<domainname>\<adminuser> "wscript \"C:\sys2wiki.vbs\" /H <Hostname /F <Filename> /U <Hostverantworliche User>"
Zu beachten ist wenn Remote abgefragt werden soll, das der User administrative Rechte innerhalb der Domain hat.
und das ganze sieht dann so aus