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-Key: 186529

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

Printed on: April 25, 2024 at 20:04 o'clock

Member: mayho33
mayho33 Jun 15, 2012 updated at 09:00:06 (UTC)
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
Member: bastla
bastla Jun 15, 2012 updated at 13:20:28 (UTC)
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
Member: RetroDude
RetroDude Jun 15, 2012 at 13:28:17 (UTC)
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!
Member: RetroDude
RetroDude Jun 15, 2012 at 13:53:09 (UTC)
Goto Top
Habs noch schnell probiert. Irgendwie schreibt er noch nichts ins File bzw. erstellt kein neues. Fehlercode erhalte ich keinen in Primalscript..
Member: bastla
bastla Jun 15, 2012 at 18:39:39 (UTC)
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
Member: RetroDude
RetroDude Jun 17, 2012 at 18:54:14 (UTC)
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
Member: bastla
bastla Jun 17, 2012 at 20:21:52 (UTC)
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
Member: mayho33
mayho33 Jun 18, 2012 updated at 19:30:37 (UTC)
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
Member: RetroDude
RetroDude Jun 18, 2012 at 21:02:36 (UTC)
Goto Top
Hallo

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

Gruss
Member: bastla
bastla Jun 19, 2012 at 06:15:21 (UTC)
Goto Top
Hallo RetroDude!

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

Grüße
bastla
Member: RetroDude
RetroDude Jun 19, 2012 at 11:09:39 (UTC)
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
Member: RetroDude
RetroDude Jun 19, 2012 at 11:33:35 (UTC)
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
Member: bastla
bastla Jun 19, 2012 at 18:35:51 (UTC)
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
Member: RetroDude
RetroDude Jun 20, 2012 at 07:43:37 (UTC)
Goto Top
Danke Bastla!

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

Gruss
RetroDude