franz-josef-ii
Goto Top

Hardwareinventarisierung - Daten zusammenführen

Guten Abend - Ischowieda face-wink

Mit Colinardos Unterstützung (ok, er hat die Hauptarbeit gemacht face-wink ) habe ich es geschafft die PCs mit der Seriennummer und einer firmeninternen Inventarnnummer in einer Datei abzuspeichern
Zusammenführen von Textdateien
Das einzige Problem ist, daß die Zeilen doppelt vorhanden, einmal mit und einmal ohne der Seriennummer, sind, aber damit kann ich leben.

Ich versuche jetzt die Monitordaten mit einzubinden was prinzipiell auch funktioniert, nur wenn der PC mehrere Bildschime bzw Bildschirm und Beamer, hat, scheitere ich.

Erster Schritt ist meine monitor.txt mit DumEDID.exe > monitor.txt. Dann wird der FQDN als erste Zeile eingefügt und dann werden die Leerzeichen und -zeilen entfernt. Das Ergebnis schaut dann so aus:


host=test.domain.intern
DumpEDIDv1.05
Copyright(c)2006-2015NirSofer
Website:http://www.nirsoft.net
*****************************************************************
Active:Yes
RegistryKey:DISPLAY\SAM04D4\4&8371761&0&UID50531072
MonitorName:SyncMaster
SerialNumber:H9XI405734
ManufactureWeek:16/2010
ManufacturerID:11596(0x2D4C)
ProductID:1236(0x04D4)
SerialNumber(Numeric):1263088180(0x4B493234)
EDIDVersion:1.3
DisplayGamma:2.20
......
......
*****************************************************************
*****************************************************************
Active:Yes
RegistryKey:DISPLAY\SAM04D4\4&8371761&0&UID50531072
MonitorName:SyncMaster
SerialNumber:HUT455U951
ManufactureWeek:21/2012
ManufacturerID:11596(0x2D4C)
ProductID:1236(0x04D4)
SerialNumber(Numeric):1263088180(0x4B493234)
EDIDVersion:1.3
DisplayGamma:2.20
......
......
*****************************************************************

Dann läuft das angepaßte PowershellScript drüber

# ---- Variablen bitte anpassen ---
# Pfad der Liste 1
$path1 = 'C:\Liste1.txt'  
# Pfad der Liste 2
$path2 = 'C:\Liste2.txt'  
# Pfad der Liste 3 die habe ich ja auch noch angefügt ;-)
$path2 = 'C:\monitor.txt'  
# Ausgabepfad der Zusammenfassungsdatei
$mergepath = 'C:\merged_list.csv'  
# ---------
# Liste der Computer und dereen Seriennummer per Regular Expression Group-Matching aus der ersten Datei extrahieren
# und über die Anzahl der Gruppen mit einer Schleife itterieren
[regex]::matches((gc $path1 | out-string),'(?ism)^PC-Name=([^\r\n]+)\s+^Seriennummer=([^\r\n]*)') | select -Expand Captures | %{  
    # Group-Matches aus dem Regex-Match Variablen zuweisen und eventuelle führende oder abschließende Leerzeichen entfernen
    # Hostname
    $hostname = $_.Groups[1].Value.trim()
    # Seriennummer
    $sn = $_.Groups[2].Value.trim()
    # Inventarnummer in der zweiten Datei anhand des Hostnamens suchen und die Inventarnummer ebenfalls per Group-Matching auslesen
    $inventarnummer = [regex]::match((gc $path2 | out-string),"(?ism)^Host=$([regex]::Escape($hostname)).*?^Inventarnummer=([^\r\n]*)") | select -Expand Groups | select -Index 1 | %{$_.Value.Trim()  

# Von mir wurden die nächsten drei Zeilen erstellt
# Monitor
    $MonitorType = [regex]::match((gc $path3 | out-string),"(?ism)^Host=$([regex]::Escape($hostname)).*?^MonitorName:([^\r\n]*)") | select -Expand Groups | select -Index 1 | %{$_.Value.Trim()  
	$MonitorSerie = [regex]::match((gc $path3 | out-string),"(?ism)^Host=$([regex]::Escape($hostname)).*?^SerialNumber:([^\r\n]*)") | select -Expand Groups | select -Index 1 | %{$_.Value.Trim()}  
	

    # Powershell-Objekt mit den Daten erstellen und ausgeben ## dieser Block wurde von mir durch den untenstehenden ersetzt
    new-object PSObject -Property @{Host=$hostname;Seriennummer=$sn;Inventarnummer=$inventarnummer}
} | select Host,Seriennummer,Inventarnummer | export-csv $mergepath -Delimiter ";" -NoType -Encoding UTF8  

#neu:

	# Powershell-Objekt mit den Daten erstellen und ausgeben
    new-object PSObject -Property @{Host=$hostname;Seriennummer=$sn;Inventarnummer=$inventarnummer;MonitorType=$MonitorType;MonitorSeriennummer=$MonitorSerie}
} | select Host,Seriennummer,Inventarnummer,MonitorType,MonitorSeriennummer,MonitorInventarnummer | export-csv $mergepath -Delimiter ";" -NoType -Encoding UTF8  

Der erste Monitor wird tadellos in der csv angezeigt, der zweite nicht mehr. Wie kann ich das schaffen, daß alle Monitore drinnen sind?

Franz

PS: Wenn ich ehrlich bin face-wink dann verstehe ich den Großteil des Scripts, aber (leider) nicht alles

Content-Key: 304228

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

Printed on: May 7, 2024 at 19:05 o'clock

Member: Franz-Josef-II
Franz-Josef-II May 12, 2016 updated at 12:59:14 (UTC)
Goto Top
So, jetzt habe ich einen Zwischenschritt eingeführt. Es wird die DumpEDID.exe > monitor.txt durchgeführt und anschließend werden alle Zeilen, die ich nicht benötige, gelöscht (findstr und Anfangsbuchstabe der Zeile), dann kommen die Leerzeichen und -zeilen dran und dann alle Zeilen, die keinen ":" drinnenhaben und der FQDN kommt in die erste Zeile.

Momentanes Problem: Ich würde gerne die "Datensätze" nummerieren. Das Ergebnis schaut z.Zt. so aus:

host:TEST-01.test.de 
----------TEMP9.TXT
Active:Yes
MonitorName:DELL1708FP
SerialNumber:FP1817BCCBHB
ManufactureWeek:46/2007
SerialNumber(Numeric):1111640130(0x42424842)
MaximumImageSize:34X27cm(17.1Inch)
MaximumResolution:1280X1024
Digital:No
Active:Yes
MonitorName:DELL1708FP
SerialNumber:FP1817BCCBHF
ManufactureWeek:51/2007
SerialNumber(Numeric):1111640130(0x42424842)
MaximumImageSize:34X27cm(17.1Inch)
MaximumResolution:1280X1024
Digital:No

Ich möchte jetzt das erste Auftreten vom MonitorName auf MonitorName 1, ein zweites auf MonitorName2 etc ändern, weil dann kann ich dies weiterverarbeiten. Kennt da jemand eine Möglichkeit?

Ein "Schönheitsproblem": Wo die zweite Zeile (---------------TEMP9.TXT) herkommt ist mir unklar, offensichtlich wird immer der Ausgangsdateiname mit abgespeichert.


Der Code schaut jetzt so aus:

@echo off
.\DumpEDID.exe > monitor.txt

findstr /v /b "W" monitor.txt > temp1.txt  
findstr /v /b "R" temp1.txt > temp2.txt  
findstr /v /b "P" temp2.txt > temp3.txt  
findstr /v /b "E" temp3.txt > temp4.txt  
findstr /v /b "V" temp4.txt > temp5.txt  
findstr /v /b "H" temp5.txt > temp6.txt  
findstr /v /b "Su" temp6.txt > temp7.txt  
findstr /v /b "Dis" temp7.txt > temp8.txt  
findstr /v /b "ManufacturerID" temp8.txt > temp9.txt  

find ":" temp9.txt > monitor.txt  
Del temp?.txt


@REM Löschen der Leerzeilen und -zeichen
@echo off &setlocal disabledelayedexpansion
(for /f "tokens=*" %%a in (monitor.txt) do (  
   set "line=%%~a"  
   setlocal enabledelayedexpansion
   set "newline=!line: =!"  
   echo(!newline!
   endlocal
))>%ComputerName%.txt

@REM + find the computer domain name
@echo off
 FOR /F "usebackq tokens=*" %%a IN (`wmic.exe COMPUTERSYSTEM GET DOMAIN /Value`) DO (  
	@((ECHO %%a | findstr /i /c:"Domain=") && SET _str=%%a) > NUL 2>&1  
)
FOR /F "tokens=2 delims=^=" %%a IN ("%_str%") do SET COMPUTERDOMAIN=%%a  
SET COMPUTERDOMAIN=%COMPUTERDOMAIN: =%
SET COMPUTERFQDN=%COMPUTERNAME%.%COMPUTERDOMAIN%

@REM FQDN als erste Zeile einfügen

echo host:%COMPUTERFQDN%>b.txt && type %ComputerName%.txt>>b.txt && move /y b.txt %ComputerName%.txt