doctordeploylogo
  [ Prev ] [ Next ] | [ Home ] [ Sitemap ] .. -... .. -.- .-. .- ... ...

Inventarisierung mit Bordmitteln

01/2021

Inventarisierungssoftware ist meist teuer, überladen und unflexibel. (hab mal selbst eine professionelle geschrieben, daher weiss ich das... :D). Aber es geht auch einfacher, nämlich mit den Bordmitteln des Betriebssystems, genauer gesagt DMI (bzw. WMI bei Windows). Unter Linux gibt's dafür dmidecode, inxi oder "lshw -xml", unter Windows wmic.exe.

Als Erstes sammeln wir mal etliche Informationen ein, am Besten bei jedem Windows-Systemstart (z.B. via Autostart-Batch). WAS eingesammelt wird, kann man in der "for"-Zeile anpassen:

rem collects wmi/systeminfo data, (c)ibi,v16.0524
setlocal
set outdir=%userprofile%\downloads\sysinf
md %outdir%
for %%W in (computersystem,os,baseboard,bios,memorychip,cpu,memcache,diskdrive,cdrom,logicaldisk,volume,useraccount,nic,nicconfig) do (
    wmic /output:%outdir%\wmi%computername%_%%W.csv %%W list brief /format:csv
)
systeminfo /fo csv > "%outdir%\si_%computername%.csv"
endlocal

Damit haben wir einen schönen Stapel an CSV Dateien mit Hardwareinformationen. Sinnvollerweise kopieren wir diese automatisiert (z.B. mit robocopy) auf einen Server. Je nach "Inventarisierungsbedarf" ist man jetzt schon fertig... Wir machen aber weiter! Unschön ist z.B. das die erste Zeile in den CSVs leer ist, denn wenn wir diese in eine Datenbank importieren wollen, sollten dort die Feldnamen stehen. Also weg damit.

# concat all wmi/sysinfo csv and elimnate first empty line produced by wmic.exe, (c)ibi,v16.0525
gci \\kermit\share\backup\sysinf\wmifozzie* | % {
    #$splfname= ($_.basename -replace "wmi([A-Z]+)_","").toupper() # upper characters, ie. wmiNAME.csv
    $splfname= (Get-Culture).textinfo.totitlecase(($_.basename -replace "wmi([A-Z]+)_","")) # CamelCase, ie. wmiName.csv
    gc $_ | select -first 1 -skip 1 | out-file c:\temp\wmi$splfname.csv
    gci (join-path $_.directoryname -childpath ("*_"+$splfname+".csv")) | % {
        gc $_ | select -skip 2 | out-file c:\temp\wmi$splfname.csv -append
        }
}
gci \\KERMIT\share\backup\sysinf -file -filter si_fozzie*.csv | % { gc $_.fullname | select -first 1 | out-file c:\temp\si_tmp.csv }
gci \\KERMIT\share\backup\sysinf -r -file -filter si_*.csv | % { gc $_.fullname | select -skip 1 | out-file c:\temp\si_tmp.csv -append}
ipcsv c:\temp\si_tmp.csv | select * -excludeproperty "hotfix*" | epcsv c:\temp\systeminfo.csv -NoTypeInformation -force

Die letzten drei Zeilen verwursteln die von Systeminfo erstellte Datei (die Liste der Hotfixes brauche ich z.B. nicht). Die bereinigten CSV-Dateien kann man jetzt in die Datenbank seiner Wahl automatisiert importieren (bspw. mit SQLite)