attituder
Goto Top

Lizenschlüssel in einer XML-Datei suchen und bearbeiten

Hallo,

leider bin ich durch die Suchfunktion auf keine brauchbare Lösung gestossen.

Durch ein Softwareupdate dass wir demnächst durchführen werden muss der vorhandene Lizenzschlüssel in einer XML-Datei ausgelesen und bearbeitet werden.

Die Datei heisst z.B. "license.xml"

- in dieser befindet sich die Zeile: <item Name="License Access Code" Value="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" />

nun muss vor dem Softwareupdate der Lizenzschlüssel auf eine weitere Gruppe erweitert werden z.B. "12345": <item Name="License Access Code" Value="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-12345" />

Ich hoffe, Ihr könnt mir bei meinem Problem weiterhelfen.

Vielen Dank schonmal im voraus!

LG

Atti

Content-ID: 169564

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

mrtux
mrtux 12.07.2011 um 12:18:06 Uhr
Goto Top
Hi !

Der Softwarehersteller bietet Dir kein Tool dafür an?

Das ist ja schon ganz schön unverschämt von einem Kunden zu verlangen, dass dessen Admin eine Batch schreiben muss, nur damit deren Lizenzgeraffel funktioniert! Manche Hersteller machen es sich schon arg leicht....Schon alleine für sowas gehört wieder der Pranger eingeführt.... face-wink

mrtux
Friemler
Friemler 12.07.2011 um 12:29:42 Uhr
Goto Top
Hallo Attituder,

teste mal folgendes:
@echo off & setlocal


set "LicFile=Test.xml"  
set "NewLicFile=TestNeu.xml"  
set "NewGroup=12345"  


for /f "usebackq delims=" %%l in ("%LicFile%") do (  
  <NUL set /p "=%%l" | findstr /c:"License Access Code" > NUL && (  
    for /f "tokens=7 delims== " %%k in ("%%l") do (  
      set "Line=%%l"  
      set "Key=%%~k"  
      call :WriteNewLine
    )
  ) || (
    >>"%NewLicFile%" (<NUL set /p "=%%l" & echo.)  
  )
)

exit /b



:WriteNewLine
  set "NewKey=%Key%-%NewGroup%"  
  call set "NewLine=%%Line:%Key%=%NewKey%%%"  
  >>"%NewLicFile%" (<NUL set /p "=%NewLine%" & echo.)  
exit /b 0

Gruß
Friemler
Lochkartenstanzer
Lochkartenstanzer 12.07.2011 um 12:38:27 Uhr
Goto Top
Bei bekanntem Schlüssel:

sed -i license.xml -e "s/XXXXX-XXXXX-XXXXX-XXXXX-XXXXX/XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-12345/g"

Bei unkanntem Schlüssel:

export LIC=`grep "item Name=\"License Access Code\" Value=" | gawk -F "\"" ' { print $4 } ' `
sed -i license.xml -e "s/$LIC/$LIC-12345/g"


Für Windows wird dafür http://www.cygwin.com benötigt.
Attituder
Attituder 12.07.2011 um 12:50:45 Uhr
Goto Top
Hi Friemler,

erstmal vielen Dank für Deine Hilfe.

Beim ausführen des Patches ergibt sich leider noch folgendes Problem:

In der XML-Datei gibt es noch diverse Zeilen mit den Inhalt "&amp", was als Befehl interpretiert wird.

Wenn ich diese Zeilen manuell entferne, fügt er korrekt die Gruppe "12345" bei der Lizenz hinzu.

MfG

Atti
Friemler
Friemler 12.07.2011 um 13:08:27 Uhr
Goto Top
Hallo Attituder,

ich habe mir schon gedacht, dass noch eine Rückmeldung in der Art kommt, evtl. auch "Die Einrückungen in der XML-Datei gehen verloren!". Ich schiebe deshalb noch eine VBScript-Version hinterher, bei der dieser ganze Ärger wegfällt. Hätte ich mal direkt so machen sollen face-sad .
strLicFile    = "Test.xml"  
strNewLicFile = "TestNeu.xml"  
strNewGroup   = "12345"  


Const ForReading = 1
Const ForWriting = 2
Const AsASCII    = 0

Set objFSO = CreateObject("Scripting.FileSystemObject")  
arrContent = Split(objFSO.OpenTextFile(strLicFile, ForReading, False, AsASCII).ReadAll, vbCRLF)

Set objOutFile = objFSO.OpenTextFile(strNewLicFile, ForWriting, True, AsASCII)

Set objRegExp        = New RegExp
objRegExp.Pattern    = "[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}"  
objRegExp.IgnoreCase = True

For Each strLine In arrContent
  If InStr(strLine, "License Access Code") > 0 Then  
    strLine = objRegExp.Replace(strLine, objRegExp.Execute(strLine)(0).Value & "-" & strNewGroup)  
  End If

  objOutFile.WriteLine strLine
Next

objOutFile.Close

Bei der Erstellung des Regulären Ausdrucks in Zeile 16 bin ich davon ausgegangen, dass in dem Lizenzcode nur Buchstaben und Zahlen vorkommen.

Gruß
Friemler
Attituder
Attituder 12.07.2011 um 13:17:26 Uhr
Goto Top
Hi Friemler,

Danke für die schnelle Antwort. Funktioniert einwandfrei!

Hast mir echt sehr weitergeholfen.

MfG

Atti