Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

String aus Datei von jedem Client auslesen und mit Hostname in Datei schreiben String steht nicht immer an exakt selber Stelle.

Mitglied: topatsch

topatsch (Level 1) - Jetzt verbinden

02.07.2009, aktualisiert 13:19 Uhr, 4512 Aufrufe, 10 Kommentare

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
01.
‚     y  Ž      ;šÊ       Ž     Y   Y   Y     Y    ‚         ?      ;šÊ        ?ilt- à d ÿÿ !à d ÿÿ !à     à  
02.
d 2 Çà d 2 ab und an Rechnernameà d 2  
03.
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
Mitglied: LotPings
02.07.2009 um 13:55 Uhr
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:
01.
@echo off 
02.
Set PCs=C:\RechnerListe.txt 
03.
Set File=C$\pragrammname\unterordner\konfig.cfg 
04.
Set Ausgabe=C:\Test.txt 
05.
set Pref=xxxxxxxx 
06.
Echo ## %Date% %Time% >%Ausgabe% 
07.
For /f "delims=" %%A in (%PCs%) Do ( 
08.
  >>%Ausgabe% set /P dummy=%%A <NUL 
09.
  if exist "\\%%A\%File" ( 
10.
    Strings -n 20 "\\%%A\%File" |findstr "^%Pref%" >>%Ausgabe%  
11.
  ) else ( 
12.
    >>%Ausgabe% echo konfig.cfg nicht gefunden 
13.
14.
)
Gruß
LotPings

Edit: Ausgabe in Datei, Ausgabe hinter Findstr
Bitte warten ..
Mitglied: bastla
02.07.2009 um 14:44 Uhr
Hallo topatsch und willkommen im Forum!

Die von LotPings angesprochene VBScript-Lösung könnte so aussehen:
01.
Konfig = "c:\programmname\unterordner\konfig.cfg" 
02.
Sammel = "\\Server\Share\Lizenzen.txt" 
03.
Von = "XXXXXXXX" 
04.
Bis = "à" 
05.
MaxLen = 12 'max. Schlüssellänge inkl Leerzeichen 
06.
 
07.
Set net = CreateObject("WScript.Network") 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
If fso.FileExists(Konfig) Then 
10.
    T = Split(fso.OpenTextFile(Konfig).ReadAll, Von) 
11.
    If Ubound(T) > 0 Then 'Kennzeichen "Von" gefunden 
12.
        K = Split(T(1), Bis) 
13.
        If Len(Trim(K(0))) <= MaxLen Then 'Länge des ausgelesenen Schlüssels kann passen 
14.
            C = net.Computername & " " 'Computername + Trennzeichen 
15.
            Neu = True 
16.
            If fso.FileExists(Sammel) Then 
17.
                L = fso.OpenTextFile(Sammel, 1, True).ReadAll 
18.
                If Instr(L, C) > 0 Then Neu = False'bereits erfasst 
19.
            End If 
20.
            If Neu Then 
21.
                fso.OpenTextFile(Sammel, 8, True).WriteLine C & Trim(K(0)) 'Rechnername + Schlüssel in Datei schreiben 
22.
            End If 
23.
        End If 
24.
    End If 
25.
End If
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
Bitte warten ..
Mitglied: topatsch
02.07.2009 um 15:05 Uhr
Okay, das bedeutet also, dass ich nicht drum herum komme eine Textdatei mit allen Rechnernamen anzulegen?
Ich habe deinen groben Entwurf mal getestet

Mit Strings funktioniert das schon echt gut und wenn ich die Ausgabe in commandline laufen lasse, bekomme ich auch alles schön untereinander aufgelistet. Aber wie kann man jetzt noch realisieren, die Ausgaben in eine Datei fließen zu lassen? Wenn ich hinter den Strings Befehl die Ausgabe in > test.txt lasse, wird mir ja nur der jeweils letzte Rechner bzw nur der ausgelesene String in die Datei geschrieben. Sorry, bin ein echter Batch Anfänger
Bitte warten ..
Mitglied: LotPings
02.07.2009 um 15:15 Uhr
Hallo Topatsch,

das geht per append mit doppeltem Umleitungszeichen >>
Ich bau das mal oben ein.

Gruß
LotPings
Bitte warten ..
Mitglied: topatsch
02.07.2009 um 15:49 Uhr
Da kann ich jetzt nur ein "WOW!!" von mir geben, ich werde mich gleich mal an's testen wagen, auch wenn ich von vbs noch weniger Ahnung als von Batch habe
Bitte warten ..
Mitglied: topatsch
02.07.2009 um 16:22 Uhr
Ich zweifel gerade "etwas" an meinem Verstand. Passe ich das Script an und führe es lokal auf dem Rechner zum testen aus, werden keine Einträge gemacht.
Groß- kleinschreibung habe ich überprüft, passt alles. Es sollte ja keinen Unterschied machen, dass ich für "Sammel = "c:\test.txt" " gesetzt habe sollte ja keinen Unterschied machen, oder? Gibt es typische Anfängerfehler?
Bitte warten ..
Mitglied: bastla
02.07.2009 um 16:39 Uhr
Hallo topatsch!

Mit der folgenden Version bekommst Du bei einem Start über die Kommandozeile mit
cscript //nologo Scriptdatei.vbs
einige Debug-Informationen:
01.
Konfig = "c:\programmname\unterordner\konfig.cfg" 
02.
Sammel = "c:\test.txt" 
03.
Von = "XXXXXXXX" 
04.
Bis = "à" 
05.
MaxLen = 12 'max. Schlüssellänge inkl Leerzeichen 
06.
 
07.
Set net = CreateObject("WScript.Network") 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
If fso.FileExists(Konfig) Then 
10.
    WScript.Echo "Datei " & Konfig & " gefunden" 
11.
    T = Split(fso.OpenTextFile(Konfig).ReadAll, Von) 
12.
    If Ubound(T) > 0 Then 'Kennzeichen "Von" gefunden 
13.
        WScript.Echo "Zerlege " & T(1) 
14.
        K = Split(T(1), Bis) 
15.
        WScript.Echo "Das sollte der Key sein: " & K(0) 
16.
        WScript.Echo "Länge des Key: " & Len(K(0)) 
17.
        If Len(Trim(K(0))) <= MaxLen Then 'Länge des ausgelesenen Schlüssels kann passen 
18.
            C = net.Computername & " " 'Computername + Trennzeichen 
19.
            Neu = True 
20.
            If fso.FileExists(Sammel) Then 
21.
                WScript.Echo "Inhalt der Sammeldatei " & Sammel & " prüfen" 
22.
                L = fso.OpenTextFile(Sammel, 1, True).ReadAll 
23.
                If Instr(L, C) > 0 Then  
24.
                    Neu = False'bereits erfasst 
25.
                    WScript.Echo "Sammeldatei enthält bereits einen Eintrag für den Rechner " & C 
26.
                End If 
27.
            End If 
28.
            If Neu Then 
29.
                WScript.Echo "Schreibe Rechnername " & C & "und Key " & K(0) & " in Sammeldatei" 
30.
                fso.OpenTextFile(Sammel, 8, True).WriteLine C & Trim(K(0)) 'Rechnername + Schlüssel in Datei schreiben 
31.
            End If 
32.
        End If 
33.
    End If 
34.
End If
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
Bitte warten ..
Mitglied: topatsch
02.07.2009 um 18:50 Uhr
Okay, also mit der Hilfestellung bin ich jetzt ein Stückchen weiter gekommen.
Die Datei wird gefunden, kann aber irgendwie nicht richtig ausgelesen werden. Das komisch ist: Sobald ich den Inhalt der Datei einmal heraus kopiere und anschließend wieder mit gleichem Inhalt der Zwischenablage überschreibe kann der String ausgelesen werden.

Allerdings gibt's noch andere Problemchen
01.
C:\>cscript //nologo vb.vbs 
02.
Datei c:\konfig.cfg gefunden 
03.
Zerlege  XXXXXX XXXXXà♥ ?»d &ang90;  Zþ?­'?        ?­   ♥    ;sÊ       ?­    ? à? s??C 
04.
:\bla\xcomp\calendar.dlljÕ♥        ?5;?'??Calendar LibraryZB'? 
05.
Das sollte der Key sein:  XXXXXX XXXXX 
06.
Länge des Key: 13 
07.
Inhalt der Sammeldatei c:\test.txt prüfen 
08.
C:\vb.vbs(22, 17) Laufzeitfehler in Microsoft VBScript: Eingabe hinter Dateiende
Bitte warten ..
Mitglied: bastla
02.07.2009 um 19:12 Uhr
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
Bitte warten ..
Mitglied: topatsch
06.07.2009 um 10:41 Uhr
Sorry für die späte Rückmeldung - Arbeit über Arbeit...
Du hast Recht, bastla, die Fehlermeldung resultierte wirklich aus einer bereits existierenden "test.txt", lösche ich diese, funktioniert es
Allerdings habe ich immernoch das Problem, dass ich den Inhalt der "Konfig.cfg" einmal mit copy/paste bearbeiten muss, damit der Inhalt von dem Script ausgelesen werden kann.
Kannst du mir sagen, woran dies liegen könnte?

Grüße
topatsch
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Schreiben eines Strings mit Leerzeichen in eine Datei

gelöst Frage von c20082005Batch & Shell6 Kommentare

Hallo, nach langem Rum- und Ausprobieren möchte ich Euch um Hilfe bitten für folgendes Problem: Ich möchte mit einer ...

Notebook & Zubehör

Thinkpadkauf - wo finde ich das exakt selbe Modell?

gelöst Frage von DerWoWussteNotebook & Zubehör14 Kommentare

Moin Kollegen. Ich habe den Auftrag exakt das selbe Notebookmodell, was wir schon haben, erneut zu kaufen - sollte ...

PHP

String zerlegen an verschieden Stellen

Frage von ppmk22PHP3 Kommentare

ich noch mal Ich habe verschieden Strings die immer 200 Zeichen lang sind. Diesen möchte ich an bestimmten stellen ...

Monitoring

Nagios Check selber schreiben

gelöst Frage von tux1996Monitoring4 Kommentare

Guten Tag, bis jetzt musste ich nie ein Nagios Plugin Schreiben da die benötigten Plugins schon vorhanden waren. Ich ...

Neue Wissensbeiträge
Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 2 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 14 StundenErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 16 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 17 StundenMicrosoft10 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1026 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server17 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...