String aus Datei von jedem Client auslesen und mit Hostname in Datei schreiben String steht nicht immer an exakt selber Stelle.
Hallo,
ich stehe vor folgendem Problem, dass ich mit Hilfe der bereits bestehenden Beiträge nicht selbständig lösen konnte, daher mein Hilferuf.
Folgendes Szenario:
Server Client Infrastruktur mit einer aus lizenztechnischer Sicht schlecht administrierbaren Software. Alle Clients sind mit Winsows XP SP3 ausgestattet, die Server mit 2003 R2.
Die Konfigurationsdatei mit dem enthaltenen Lizenzschlüssel, liegt unter folgendem Verzeichnis:
c:\pragrammname\unterordner\konfig.cfg
Hier ein Auszug aus dieser Datei
Der gesuchte String steht an der Stelle mit den X-en (öffnet man die Datei mit dem Editor steht alles in einer Zeile). Die ersten acht Zeichen sind immer gleich, darauf folgen dann sechs Ziffern und ein mal fünf Ziffern, also insgesamt 11 gesuchte Ziffern. Die Abfolge ist meistens mit einem Blank getrennt, allerdings nicht jedes mal - mit Blank wären es also 12. Beendet wird die Zeichenfolge immer mit "à".
Mein Ziel ist es jetzt den variablen Teil des Strings, inclusive der Rechnernamen untereinander in eine Textdatei auf einem Netzwerkshare zu schreiben.
Also in folgendem Format:
Rechnername XXXXXX XXXXX
Rechnername XXXXXX XXXXX
...
Ich hoffe Ihr könnt mir helfen, vielen Dank im Voraus!!
Grüße
topatsch
ich stehe vor folgendem Problem, dass ich mit Hilfe der bereits bestehenden Beiträge nicht selbständig lösen konnte, daher mein Hilferuf.
Folgendes Szenario:
Server Client Infrastruktur mit einer aus lizenztechnischer Sicht schlecht administrierbaren Software. Alle Clients sind mit Winsows XP SP3 ausgestattet, die Server mit 2003 R2.
Die Konfigurationsdatei mit dem enthaltenen Lizenzschlüssel, liegt unter folgendem Verzeichnis:
c:\pragrammname\unterordner\konfig.cfg
Hier ein Auszug aus dieser Datei
‚ y Ž ;šÊ Ž Y Y Y Y ‚ ? ;šÊ ?ilt- à d ÿÿ !à d ÿÿ !à à
d 2 Çà d 2 ab und an Rechnernameà d 2
Firmennameà d 2 XXXXXXXX XXXXXX XXXXXXà »d Žþ‚
Der gesuchte String steht an der Stelle mit den X-en (öffnet man die Datei mit dem Editor steht alles in einer Zeile). Die ersten acht Zeichen sind immer gleich, darauf folgen dann sechs Ziffern und ein mal fünf Ziffern, also insgesamt 11 gesuchte Ziffern. Die Abfolge ist meistens mit einem Blank getrennt, allerdings nicht jedes mal - mit Blank wären es also 12. Beendet wird die Zeichenfolge immer mit "à".
Mein Ziel ist es jetzt den variablen Teil des Strings, inclusive der Rechnernamen untereinander in eine Textdatei auf einem Netzwerkshare zu schreiben.
Also in folgendem Format:
Rechnername XXXXXX XXXXX
Rechnername XXXXXX XXXXX
...
Ich hoffe Ihr könnt mir helfen, vielen Dank im Voraus!!
Grüße
topatsch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119603
Url: https://administrator.de/forum/string-aus-datei-von-jedem-client-auslesen-und-mit-hostname-in-datei-schreiben-string-steht-nicht-immer-an-119603.html
Ausgedruckt am: 27.04.2025 um 12:04 Uhr
10 Kommentare
Neuester Kommentar

Hallo topatsch,
es handelt sich wohl um eine Binärdatei, entweder kannst du mit festen Offsets lesen (z.Bsp. mit vbscript) oder du kannst mit einem Tool wie Strings von Sysinternals alle Textelemente ab einer bestimmten Textlänge und nach dem fixen Anfang filtern. Den Rechnernamen kennst du ja.
Ein grober Entwurf:
Gruß
LotPings
Edit: Ausgabe in Datei, Ausgabe hinter Findstr
es handelt sich wohl um eine Binärdatei, entweder kannst du mit festen Offsets lesen (z.Bsp. mit vbscript) oder du kannst mit einem Tool wie Strings von Sysinternals alle Textelemente ab einer bestimmten Textlänge und nach dem fixen Anfang filtern. Den Rechnernamen kennst du ja.
Ein grober Entwurf:
@echo off
Set PCs=C:\RechnerListe.txt
Set File=C$\pragrammname\unterordner\konfig.cfg
Set Ausgabe=C:\Test.txt
set Pref=xxxxxxxx
Echo ## %Date% %Time% >%Ausgabe%
For /f "delims=" %%A in (%PCs%) Do (
>>%Ausgabe% set /P dummy=%%A <NUL
if exist "\\%%A\%File" (
Strings -n 20 "\\%%A\%File" |findstr "^%Pref%" >>%Ausgabe%
) else (
>>%Ausgabe% echo konfig.cfg nicht gefunden
)
)
Gruß
LotPings
Edit: Ausgabe in Datei, Ausgabe hinter Findstr
Hallo topatsch und willkommen im Forum!
Die von LotPings angesprochene VBScript-Lösung könnte so aussehen:
Gestartet werden soll das Script lokal auf jedem Rechner (zB als "Starten"- oder "Logon"-Script) - da vorweg kontrolliert wird, ob der Schlüsses dieses Rechners bereits gespeichert ist, kann es auch mehrmals ausgeführt werden.
Falls keine "konfig.cfg" bzw keine dem vorgegebenen Schema entsprechenden Daten gefunden werden, erfolgt kein Eintrag (Fehlermeldungen ließen sich aber bei Bedarf ergänzen).
Zu beachten wäre noch, dass für die Werte von Von und Bis Groß-/Kleinschreibung unterschieden wird.
Grüße
bastla
Die von LotPings angesprochene VBScript-Lösung könnte so aussehen:
Konfig = "c:\programmname\unterordner\konfig.cfg"
Sammel = "\\Server\Share\Lizenzen.txt"
Von = "XXXXXXXX"
Bis = "à"
MaxLen = 12 'max. Schlüssellänge inkl Leerzeichen
Set net = CreateObject("WScript.Network")
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(Konfig) Then
T = Split(fso.OpenTextFile(Konfig).ReadAll, Von)
If Ubound(T) > 0 Then 'Kennzeichen "Von" gefunden
K = Split(T(1), Bis)
If Len(Trim(K(0))) <= MaxLen Then 'Länge des ausgelesenen Schlüssels kann passen
C = net.Computername & " " 'Computername + Trennzeichen
Neu = True
If fso.FileExists(Sammel) Then
L = fso.OpenTextFile(Sammel, 1, True).ReadAll
If Instr(L, C) > 0 Then Neu = False'bereits erfasst
End If
If Neu Then
fso.OpenTextFile(Sammel, 8, True).WriteLine C & Trim(K(0)) 'Rechnername + Schlüssel in Datei schreiben
End If
End If
End If
End If
Falls keine "konfig.cfg" bzw keine dem vorgegebenen Schema entsprechenden Daten gefunden werden, erfolgt kein Eintrag (Fehlermeldungen ließen sich aber bei Bedarf ergänzen).
Zu beachten wäre noch, dass für die Werte von Von und Bis Groß-/Kleinschreibung unterschieden wird.
Grüße
bastla

Hallo Topatsch,
das geht per append mit doppeltem Umleitungszeichen >>
Ich bau das mal oben ein.
Gruß
LotPings
das geht per append mit doppeltem Umleitungszeichen >>
Ich bau das mal oben ein.
Gruß
LotPings
Hallo topatsch!
Mit der folgenden Version bekommst Du bei einem Start über die Kommandozeile mit
einige Debug-Informationen:
Bei mir hat das Script mit Deinen Testdaten von oben (ohne Zeilenschaltungen und mit einem "X" in der letzten Gruppe weniger
) funktioniert.
Grüße
bastla
Mit der folgenden Version bekommst Du bei einem Start über die Kommandozeile mit
cscript //nologo Scriptdatei.vbs
Konfig = "c:\programmname\unterordner\konfig.cfg"
Sammel = "c:\test.txt"
Von = "XXXXXXXX"
Bis = "à"
MaxLen = 12 'max. Schlüssellänge inkl Leerzeichen
Set net = CreateObject("WScript.Network")
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(Konfig) Then
WScript.Echo "Datei " & Konfig & " gefunden"
T = Split(fso.OpenTextFile(Konfig).ReadAll, Von)
If Ubound(T) > 0 Then 'Kennzeichen "Von" gefunden
WScript.Echo "Zerlege " & T(1)
K = Split(T(1), Bis)
WScript.Echo "Das sollte der Key sein: " & K(0)
WScript.Echo "Länge des Key: " & Len(K(0))
If Len(Trim(K(0))) <= MaxLen Then 'Länge des ausgelesenen Schlüssels kann passen
C = net.Computername & " " 'Computername + Trennzeichen
Neu = True
If fso.FileExists(Sammel) Then
WScript.Echo "Inhalt der Sammeldatei " & Sammel & " prüfen"
L = fso.OpenTextFile(Sammel, 1, True).ReadAll
If Instr(L, C) > 0 Then
Neu = False'bereits erfasst
WScript.Echo "Sammeldatei enthält bereits einen Eintrag für den Rechner " & C
End If
End If
If Neu Then
WScript.Echo "Schreibe Rechnername " & C & "und Key " & K(0) & " in Sammeldatei"
fso.OpenTextFile(Sammel, 8, True).WriteLine C & Trim(K(0)) 'Rechnername + Schlüssel in Datei schreiben
End If
End If
End If
End If
Grüße
bastla
Hallo topatsch!
Der Fehler "Laufzeitfehler in Microsoft VBScript: Eingabe hinter Dateiende" resultiert vermutlich aus einer "test.txt" mit 0 Byte (von vorhergehenden Testläufen) - wenn Du diese löschst, sollte es in weiterer Folge klappen (ich ergänze das Script nachher, um den Fehler abzufangen) ...
Grüße
bastla
Der Fehler "Laufzeitfehler in Microsoft VBScript: Eingabe hinter Dateiende" resultiert vermutlich aus einer "test.txt" mit 0 Byte (von vorhergehenden Testläufen) - wenn Du diese löschst, sollte es in weiterer Folge klappen (ich ergänze das Script nachher, um den Fehler abzufangen) ...
Grüße
bastla