Zum Inhalt wechseln


Foto

per script in einer ini-datei text schreiben/ändern


  • Bitte melde dich an um zu Antworten
28 Antworten in diesem Thema

#1 MAJEG

MAJEG

    Newbie

  • 16 Beiträge

 

Geschrieben 19. Januar 2009 - 14:37

Hallo,

bin in Script Programmierung ein Neuling deshalb die Frage:

Wie kann man in einer ini-Datei eine Zeile ändern, oder einen Text anhängen?
Pfad: C:\Programme\OCS Inventory Agent\service.ini

Die Datei sieht wie folgt aus:
[OCS_SERVICE]
NoProxy=1
Server=test.net
Pnum=80
Miscellaneous= /S /server:test.net /pnum:80
PROLOG_FREQ=4
OLD_PROLOG_FREQ=4
TTO_WAIT=2940


Ich bräuchte nun in der Zeile Miscellaneous einen Text hinzugefügt -> "/NP"

Die neue Zeile sollte dann so aussehen:
Miscellaneous= /S /server:test.net /pnum:80 /NP

Weiters sollte man dieses Script per Gruppenrichtlinie einer Domäne verteilen können. Die Datei und der Programmpfad lautet auf allen Clients gleich.

Kann mir jemand bitte weiterhelfen, Danke schön im voraus :)

#2 frr

frr

    Member

  • 223 Beiträge

 

Geschrieben 19. Januar 2009 - 15:30

Hallo,

sind die Clients alle XP Clients?

Grüße

Frank
Viele Grüße

Frank Röder
"Ex oriente lux"

#3 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 19. Januar 2009 - 15:33

Per VBScript könnte man in Deinem Fall einfach den String suchen und ersetzen lassen:
Set MyFiles = CreateObject("Scripting.FileSystemObject")

varDatei="C:\Programme\OCS Inventory Agent\service.ini"
Set f = MyFiles.OpenTextFile(varDatei, 1)
Text = f.ReadAll

varSearch="Miscellaneous= /S /server:test.net /pnum:80"
varReplace="Miscellaneous= /S /server:test.net /pnum:80 /NB"

Set f = MyFiles.OpenTextFile(varDatei, 2, True)
f.Write Replace(Text, varSearch, varReplace,1,-1,1)

Sollten die Parameter hinter "Miscellaneous=" unterschiedlich sein, die Position jedoch egal, ginge für die 2 Variablen ggf. auch
varSearch="Miscellaneous="
varReplace="Miscellaneous= /NB"

My name is Frank, you can say you to me.

#4 MAJEG

MAJEG

    Newbie

  • 16 Beiträge

 

Geschrieben 20. Januar 2009 - 06:51

@Cybquest: Danke für die schnelle Hilfe, werd ich gleich mal ausprobieren. :D

#5 MAJEG

MAJEG

    Newbie

  • 16 Beiträge

 

Geschrieben 21. Januar 2009 - 06:52

@Cybquest:

Danke das Script funktioniert wunderbar. Jetzt hätte ich noch eine Frage, wenn ich nun dieses Script per GPO beim starten eines Clients verteile.

Wie kann man nun eine Abfrage vor das Script setzen, ob dieses schon mal durchgeführt wurde, und wenn "ja" - > dann abgebrochen wird.

Sonst wird immer die die gewünschte zeile abgefragt, und durch die neue ersetzt.

Danke für die Hilfe

#6 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 21. Januar 2009 - 08:58

Z.B. im Script selbst einfach prüfen lassen, ob der String schon korrekt gesetzt ist (bzw. ob er noch nicht gesetzt ist):
Set MyFiles = CreateObject("Scripting.FileSystemObject")

varDatei="C:\Programme\OCS Inventory Agent\service.ini"
Set f = MyFiles.OpenTextFile(varDatei, 1)
Text = f.ReadAll

varSearch="Miscellaneous= /S /server:test.net /pnum:80"
varReplace="Miscellaneous= /S /server:test.net /pnum:80 /NB"

If Instr(Text,varReplace)=0 then
  Set f = MyFiles.OpenTextFile(varDatei, 2, True)
  f.Write Replace(Text, varSearch, varReplace,1,-1,1)
End If

My name is Frank, you can say you to me.

#7 MAJEG

MAJEG

    Newbie

  • 16 Beiträge

 

Geschrieben 21. Januar 2009 - 09:42

@Cybquest:

Danke für die schnelle Antwort. Habe es bereits ausprobiert, funktioniert super.
Wie gesagt bin doch ein neuling -> jedoch habe ich jetzt schon viel dazugelernt.

#8 frr

frr

    Member

  • 223 Beiträge

 

Geschrieben 21. Januar 2009 - 09:58

Hallo,

hättest Du auf meine Frage geantwortet, dann hättest Du Dir vielleicht den ganzen Zirkus sparen können. Wenn es alles XP Clients sind, dann hättest Du das über die Gruppenrichtlinienerweiterungen durchführen können und damit nicht eine einzige Skriptzeile schreiben müssen.

Grüße

Frank
Viele Grüße

Frank Röder
"Ex oriente lux"

#9 MAJEG

MAJEG

    Newbie

  • 16 Beiträge

 

Geschrieben 21. Januar 2009 - 10:59

@Frr. Sorry das ich nicht gleich geantwortet habe, aber es sind nicht alle Clienst WinXp. Es gibt nioch ein paar Raritäten die unter Win200 laufen.

Aber trotzdem danke für die Antwort und dein angebotene Holfe. :)

@Cybquest:

Ich hätte da noch eine Frage zu vbs Scripts ->
Kann man eine Setup.exe via vbs Script starten, und auch überprüfen ob dieses Programm bereits installiert ist?

Das Programm besitzt den Namen SingleLogon und wird unter dem Standardpfad C:\Programme\SingleLogon\... installiert.

Dies würde wieder via GPO auf Win2000 und WinXp Maschinen durchgeführt werden müssen. Dazu hätte ich dieses vbs Script und die Setup.exe in die GPO abgelegt und beim starten der Clients wird dieses aktiviert.

#10 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 21. Januar 2009 - 12:11

Machen kann man fast alles ;)

Wenn das Programm auch eine MSI bietet, könnte man es einfach über GPO verteilen.

Stichworte zu VB-Script:
Überprüfen, ob eine Datei vorhanden ist:
if MyFiles.FileExists(varDatei) then
...
Exe starten:
Set WShell=wscript.CreateObject("Wscript.Shell")
WShell.Run "Setup.exe"
...

My name is Frank, you can say you to me.

#11 MAJEG

MAJEG

    Newbie

  • 16 Beiträge

 

Geschrieben 21. Januar 2009 - 13:34

@Cybquest:

Das MSI Pakete funktionieren per GPO hab ich auch gerade nachgelesen, iach habe aber für dieses Paket keine MSI nur eine EXE.

Danke. Werd versuchen mir eines zu erstellen.

#12 Sunny61

Sunny61

    Expert Member

  • 22.101 Beiträge

 

Geschrieben 21. Januar 2009 - 16:02

Das MSI Pakete funktionieren per GPO hab ich auch gerade nachgelesen, iach habe aber für dieses Paket keine MSI nur eine EXE.


Macht nix, wenn es die entsprechenden Parameter gibt, sollte es ganz einfach sein. Schau dir doch mal dieses Beispiel an: Eigenbau und Erstellung eines MSI Paketes am Beispiel des Internet Explorer 7
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#13 MAJEG

MAJEG

    Newbie

  • 16 Beiträge

 

Geschrieben 18. März 2009 - 19:48

Hallo Cybquest,

ich habe das Script bei dem du mir geholfen hast bereits per GPO verteilt, hat wunderbar funktioniert. Danke nochmals.

Jetzt hätte ich dazu eine neue Frage, hab schon in einigen Foren nachgestöbert aber so richtig bin ich nich zu einem Ende gekommen.

Wie kann man das Script so umbauen das man einen Text ersetz (dies funktioniert bereits) und 2 weitere Zeilen in die Datei schreiben (gleich angefügt und ohne Zeilen in der Datei zu löschen)?


Funktioniert das eventuell mit ??

Const SuchText = "bestimmter Text" 
Const NeuText= "einzufügender Text" 

For i = 0 To UBound(Lines) 
If Instr(LCase(Lines(i)), LCase(SuchText)) Then NewFile.WriteLine Neutext	NewFile.WriteLine Lines(i) 

Ich wollte dies beim derzeitigen Script anfügen:
Derzeitiger Code:

Set MyFiles = CreateObject("Scripting.FileSystemObject")

varDatei="C:\Programme\OCS Inventory Agent\service.ini"
Set f = MyFiles.OpenTextFile(varDatei, 1)
Text = f.ReadAll

varSearch="Miscellaneous= /S /server:test.net /pnum:80"
varReplace="Miscellaneous= /S /server:test.net /pnum:80 /NB"

If Instr(Text,varReplace)=0 then
  Set f = MyFiles.OpenTextFile(varDatei, 2, True)
  f.Write Replace(Text, varSearch, varReplace,1,-1,1)
End If


#14 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 18. März 2009 - 20:02

Ich wollte dies beim derzeitigen Script anfügen:

Ja nu... dann mach's doch :D

Set MyFiles = CreateObject("Scripting.FileSystemObject")

varDatei="C:\Programme\OCS Inventory Agent\service.ini"
Set f = MyFiles.OpenTextFile(varDatei, 1)
Text = f.ReadAll

varSearch="Miscellaneous= /S /server:test.net /pnum:80"
varReplace="Miscellaneous= /S /server:test.net /pnum:80 /NB"

If Instr(Text,varReplace)=0 then
  Set f = MyFiles.OpenTextFile(varDatei, 2, True)
  f.Write Replace(Text, varSearch, varReplace,1,-1,1)
  f.WriteLine "Ne Zeile am Ende"
  f.WriteLine "Noch ne Zeile am Ende"
End If

My name is Frank, you can say you to me.

#15 zahni

zahni

    Expert Member

  • 16.392 Beiträge

 

Geschrieben 18. März 2009 - 20:21

Geht auch mit Kixtart mit der funktion "writeprofilestring" . Dazu gibt es nähmlich in Windows eine (alte ;) ) API, die Kixtart hier benutzt. Ist genau eine Zeile Code..

-Zahni

Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!