retrodude
Goto Top

Codeblock per VBscript in xml File einfügen

Hallo

Ich muss auf bestimmten Clients den Inhalt einer in xml geschriebenen Datei ergänzen.
Folgender Codeblock muss im xml unten an angegebener Stelle eingefügt werden. Kann mir jemand sagen, wie ich dies mit VBScript am besten löse?
Das File liegt unter "c:\documents and settings\user\application data\programmname\vpn\file.f5c" auf den Clients.
Danke im Voraus!

 ' ///////////////////////////////////      
 <SITEM>
         <ADDRESS>server.domain.neu</ADDRESS>
         <USER></USER>
         <ALIAS></ALIAS>
         <ORIGIN>Server.domain.alt/Teil1</ORIGIN>
         <SSL_CERT_AUTOLOGIN>0</SSL_CERT_AUTOLOGIN>
         <SSL_CERT_LOGIN_TO_WEBTOP>0</SSL_CERT_LOGIN_TO_WEBTOP>
         <PASSWORD></PASSWORD>
         <OPTIONAL_FIELD></OPTIONAL_FIELD>
         <SAVEPASSWORDS>NO</SAVEPASSWORDS>
</SITEM>
 ' ///////////////////////////////////  

<?xml version="1.0" encoding="UTF-16" standalone="no"?>  

<PROFILE VERSION="2.0">  
   <SERVERS TRUSTED="YES">  
      <SITEM>
         <ADDRESS>Server.domain.alt/Teil1</ADDRESS>
         <USER>Username</USER>
         <ALIAS></ALIAS>
         <ORIGIN>Server.domain.alt/Teil1</ORIGIN>
         <SSL_CERT_AUTOLOGIN>1</SSL_CERT_AUTOLOGIN>
         <SSL_CERT_LOGIN_TO_WEBTOP>1</SSL_CERT_LOGIN_TO_WEBTOP>
         <PASSWORD></PASSWORD>
         <OPTIONAL_FIELD></OPTIONAL_FIELD>
         <SAVEPASSWORDS>NO</SAVEPASSWORDS>
      </SITEM>
      
 ' ///////////////////////////////////      
 ' Hier sollte der Codeblock eingefügt werden  
 ' ///////////////////////////////////    
      
   </SERVERS>
   <CUSTOMDIALER>
      <ENTRY>
         <NAME>Network Access</NAME>
         <REDIALATTEMPTS>3</REDIALATTEMPTS>
         <REDIALSECONDS>60</REDIALSECONDS>
         <SHOWDIALINGPROGRESS>1</SHOWDIALINGPROGRESS>
         <PREVIEWUSERPASSWORD>1</PREVIEWUSERPASSWORD>
         <PREVIEWPHONENUMBER>1</PREVIEWPHONENUMBER>
         <SHOWMONITORINTASKBAR>1</SHOWMONITORINTASKBAR>
      </ENTRY>
  etc.
  etc.
  etc.

Content-ID: 186529

Url: https://administrator.de/forum/codeblock-per-vbscript-in-xml-file-einfuegen-186529.html

Ausgedruckt am: 23.12.2024 um 06:12 Uhr

mayho33
mayho33 15.06.2012 aktualisiert um 11:00:06 Uhr
Goto Top
Hi!

Du musst das XML-File erst einmal in ein Array einlesen. und dann entsprechen wieder schreiben
hier ein kleines Besipiel:

Dim objShell : Set objShell = WScript.CreateObject("Wscript.Shell")
Dim objFso : Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
Dim CDir : CDir = objFso.GetParentFolderName(WScript.ScriptFullName)
Dim arr

Set File = objFso.OpenTextFile("c:\a.txt", 1) '1 = zum Lesen
tmp = file.ReadAll
arr = Split(tmp, vbNewLine)
file.Close
i = 0

Set File = objFso.OpenTextFile("C:\a.txt", 2) '2 = zum Schreiben
Do
file.WriteLine arr(i)
If InStr(1, arr(i), "text4",1) Then
file.WriteLine "Noch was anderes"
End if
i = i +1
Loop Until i = UBound(arr)
file.Close
bastla
bastla 15.06.2012 aktualisiert um 15:20:28 Uhr
Goto Top
@mayho33
... wobei es sich eher anbieten würde, auf die zeilenweise Zerlegung zu verzichten:
AppData = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%APPDATA%")  
FilePath = AppData & "\programmname\vpn\file.f5c"  
SplitString = "</SERVERS>"  

Set fso = CreateObject("Scripting.FileSystemObject")  
If Not fso.FileExists(FilePath) Then WScript.Quit

XML = fso.OpenTextFile(FilePath).ReadAll
If InStr(XML, SplitString) = 0 Then WScript.Quit

Parts = Split(XML, SplitString)

XMLNew = Parts(0) & _
vbCrLf & "         <ADDRESS>server.domain.neu</ADDRESS>" & _  
vbCrLf & "         <USER></USER>" & _  
vbCrLf & "         <ALIAS></ALIAS>" & _  
vbCrLf & "         <ORIGIN>Server.domain.alt/Teil1</ORIGIN>" & _  
vbCrLf & "         <SSL_CERT_AUTOLOGIN>0</SSL_CERT_AUTOLOGIN>" & _  
vbCrLf & "         <SSL_CERT_LOGIN_TO_WEBTOP>0</SSL_CERT_LOGIN_TO_WEBTOP>" & _  
vbCrLf & "         <PASSWORD></PASSWORD>" & _  
vbCrLf & "         <OPTIONAL_FIELD></OPTIONAL_FIELD>" & _  
vbCrLf & "         <SAVEPASSWORDS>NO</SAVEPASSWORDS>" & _  
vbCrLf & vbCrLf & SplitString & Parts(1)

fso.CreateTextFile(FilePath).Write XMLNew

@RetroDude
Durch die Zeilen 1 und 2 sollte das dann als Logon-Script verwendbar sein.

Zu beachten wäre noch, dass in dieser Version keine Sicherungskopie der alten Datei erstellt wird!

Grüße
bastla
RetroDude
RetroDude 15.06.2012 um 15:28:17 Uhr
Goto Top
Hallo

Danke Leute. Werde es nächste Woche angehen. Es wird auf jeden Fall aus dem Loginscript angeworfen.

Gruss und schönes Wochenende!
RetroDude
RetroDude 15.06.2012 um 15:53:09 Uhr
Goto Top
Habs noch schnell probiert. Irgendwie schreibt er noch nichts ins File bzw. erstellt kein neues. Fehlercode erhalte ich keinen in Primalscript..
bastla
bastla 15.06.2012 um 20:39:39 Uhr
Goto Top
Hallo RetroDude!

Dir werden ja die beiden Abbruchbedingungen aufgefallen sein - setz dort mal mit der Fehlersuche an, zB: steht auch tatsächlich "</SERVERS>" (und nicht etwa "</Servers>") - in der Datei?

Grüße
bastla
RetroDude
RetroDude 17.06.2012 um 20:54:14 Uhr
Goto Top
Hallo Bastla!
Danke für die schnelle Antwort. Ja, diese Bedingungen habe ich natürlich berücksichtigt. Das Servers Tag ist so wie es oben im Script steht. Hab nicht gewusst, dass das ganze Case Sensitive behandelt wird. Da es aber gross geschrieben ist, sollte er dort nich scheitern. Den Pfad habe ich ebenfalls unter die Lupe genommen. werde am Dienstag noch mal testen. Ich begreife noch nicht ganz was er da genau prüft. Wieso noch XML, vorher?

Gruss und danke zum Voraus!

Retrodude
bastla
bastla 17.06.2012 um 22:21:52 Uhr
Goto Top
Hallo RetroDude!
Ich begreife noch nicht ganz was er da genau prüft. Wieso noch XML, vorher?
Falls Du damit die Zeile 9 meinst: Dort wird nach "</SERVERS>" gesucht, da ja anhand dieses Strings dann geteilt werden soll ...

Grüße
bastla
mayho33
mayho33 18.06.2012 aktualisiert um 21:30:37 Uhr
Goto Top
Hi Bastla!

Klar, jeder löst es auf seine weise. Wobei ich bei deiner Variante hier duchaus Vorteile sehe. Ist in meiner Sammlung..... face-wink
RetroDude
RetroDude 18.06.2012 um 23:02:36 Uhr
Goto Top
Hallo

Es ist mir schon bewusst, was er mit splittstring untersucht, ich frage mich nur wieso noch dieses XML vorangehend kommt.

Gruss
bastla
bastla 19.06.2012 um 08:15:21 Uhr
Goto Top
Hallo RetroDude!

XML ist eine Variable, die den gesamten Dateiinhalt (siehe Zeile 8) enthält ...

Grüße
bastla
RetroDude
RetroDude 19.06.2012 um 13:09:39 Uhr
Goto Top
Ah, danke Bastla. Jetzt hab ich freie Sicht.. Danke noch ma für deine Geduld und den kompetenten Beistand.. face-wink

Gruss und schöne Woche

Retrodude
RetroDude
RetroDude 19.06.2012 um 13:33:35 Uhr
Goto Top
Hei Bastla

Habs probiert. klappt nicht weil er irgendwie mit der Formatierung des xmls nicht klar kommt. Er liest nur Kauderwelsch aus dieser Datei. Habe mir die Inhalte der Variablen jeweils anzeigen lassen. Stimmt alles bis auf die XML Variable.

Gruss
bastla
bastla 19.06.2012 um 20:35:51 Uhr
Goto Top
Hallo RetroDude!

Soferne Deine Datei im Unicode-Format gespeichert sein sollte, könntest Du die Zeilen 8 und 25 durch
XML = fso.OpenTextFile(FilePath, 1, True, True).ReadAll
und
fso.CreateTextFile(FilePath, True, True).Write XMLNew
ersetzen ...

Grüße
bastla
RetroDude
RetroDude 20.06.2012 um 09:43:37 Uhr
Goto Top
Danke Bastla!

Das war das Problem. Danke für deine Hilfe!

Gruss
RetroDude