[Gelöst] FileExists und loadTextFile findet Existierende Datei nicht

Antworten
Tigger
Beiträge: 25
Registriert: 27 Jun 2018, 08:31

[Gelöst] FileExists und loadTextFile findet Existierende Datei nicht

Beitrag von Tigger »

Hallo Forum,

ich benutze FileExists und loadTextFile beide Finden die Datei nicht obwohl sie Existiert.

Code: Alles auswählen

set $XMLFile$ = "%System%\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.xml"
if FileExists($XMLFile$)
	set $XMLFileContent$ = loadTextFile($XMLFile$)
	set $XMLFileContent$ = stringReplaceRegex($XMLFileContent$,'[NEBENSTELLE]', '31')
	saveTextFile($XMLFileContent$,$XMLFile$)
endif
Das Unterverzeichnis PhoneSuite_TAPI_for_Asterisk_cfg kann schon nicht gefunden werde.

Hat Jemand einen Tipp.

MfG Alexander
Zuletzt geändert von Tigger am 07 Dez 2021, 16:41, insgesamt 1-mal geändert.
Benutzeravatar
SisterOfMercy
Beiträge: 1524
Registriert: 22 Jun 2012, 19:18

Re: FileExists und loadTextFile findet Existierende Datei nicht

Beitrag von SisterOfMercy »

You are aware that %System% refers to the system32 directory, right?
See https://download.uib.de/4.2/documentati ... st-system1

Which setup have you used? This one? https://www.phonesuite.de/download-de/P ... _setup.zip

And lastly, you should also look at the patches section in the manual, because using that is much easier for what you are trying to do.
https://download.uib.de/4.2/documentati ... pt-patches
Bitte schreiben Sie Deutsch, when I'm responding in the German-speaking part of the forum!
Tigger
Beiträge: 25
Registriert: 27 Jun 2018, 08:31

Re: FileExists und loadTextFile findet Existierende Datei nicht

Beitrag von Tigger »

Hallo,

einen Teil habe ich gelöst:

Code: Alles auswählen

set $XMLFile$ = "%System%\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.xml"
if FileExists64($XMLFile$)
	set $XMLFileContent$ = loadTextFile($XMLFile$)
	set $XMLFileContent$ = stringReplaceRegex($XMLFileContent$,'[NEBENSTELLE]', '31')
	saveTextFile($XMLFileContent$,$XMLFile$)
endif
FileExists64 löst mein Finde Problem.

Danke für den Hinweis mit de Patches, aber kann ich damit auch XML Files bearbeiten?

MfG Alexander
mattiasmab
Beiträge: 90
Registriert: 29 Jan 2021, 12:17

Re: FileExists und loadTextFile findet Existierende Datei nicht

Beitrag von mattiasmab »

Das ist leider die Umlenkung von 32 Bit Prozessen (wozu Opsi-Script gehört).
Ich habe soeteas Mal dadurch gelöst, dass ich zunächst per Fileexistssysnative prüfe und dort dann im Erfolgsfall (also dem If-Branch) per File-Sektion - auch aufgerufen per "/sysnative" eine Kopie an einen nicht umgeleiteten Ordner (wie c:/tmp oder so). Dann von dort normal editieren (in deinem Fall loadtextfile) und anschließend in einer weiteren File-Sektion wieder zurückkopieren. Leider etwas umständlich, aber was anderes fällt mir derzeit nicht ein.
Auch im Handbuch steht in dem Bereich nicht anderes.
mattiasmab
Beiträge: 90
Registriert: 29 Jan 2021, 12:17

Re: FileExists und loadTextFile findet Existierende Datei nicht

Beitrag von mattiasmab »

Ich war neugierig wie die Umleitung funktioniert und dabei bin ich auch auf eine einfache Lösung des Problems gestoßen.
Ersetze den Pfad wie folgt, um Windows anzuweisen, die Redirection nicht zu nutzen:

Code: Alles auswählen

; Ersetze
set $XMLFile$ = "%System%\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.xml"
; Durch
set $XMLFile$ = "%Systemroot%\sysnative\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.xml"
Danach funktioniert auch das Laden per loadtextfile. Allerdings sollte man, falls noch 32bit Systeme im Einsatz sind, eine Bedingung einbauen, da dieser Pfad weder unter 32Bit-Windows, noch unter einer 64Bit-Anwendung unter 64Bit-Windows existiert (letzteres ist für OPSI derzeit egal, da es 32Bit ist).

Code: Alles auswählen

if GetSystemType = "64 Bit System"
	set $XMLFile$ = "%Systemroot%\sysnative\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.xml"
else
	set $XMLFile$ = "%System%\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.xml"
endif
Tigger
Beiträge: 25
Registriert: 27 Jun 2018, 08:31

Re: FileExists und loadTextFile findet Existierende Datei nicht

Beitrag von Tigger »

Hallo,

Danke das hat geholfen.

Ich kann jetzt meine Datei soweit manipulieren.

Allerdings kann ich Sie nicht speichern

Code: Alles auswählen

if GetSystemType = "64 Bit System"
	set $XMLFileOrg$ = "%Systemroot%\sysnative\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.org.xml"
	set $XMLFileNew$ = "%Systemroot%\sysnative\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.xml"
else
	set $XMLFileOrg$ = "%System%\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.org.xml"
	set $XMLFileNew$ = "%System%\PhoneSuite_TAPI_for_Asterisk_cfg\cfg\ast_lines.xml"
endif

if FileExists64($XMLFileOrg$)	
	set $XMLFileContent$ = loadTextFile($XMLFileOrg$)
	set $XMLFileContent$ = stringReplaceRegexInList($XMLFileContent$,'\[NEBENSTELLE\]', '31')
	saveTextFile($XMLFileContent$,$XMLFileNew$)
endif
Fehler Code bei saveTextFile:

Code: Alles auswählen

[2] [2021-12-07 16:02:35.687] []   Syntax Error in Section: Actions (Command in line 56 in section: Actions; file: setup.opsiscript; section start at line: 15; origin: setup.opsiscript; line: 56): saveTextFile -> undefined
[2] [2021-12-07 16:02:35.692] []   Syntax Error in Section: Actions (Command in line 57 in section: Actions; file: setup.opsiscript; section start at line: 15; origin: setup.opsiscript; line: 57): EndIf -> expected
opsi-script Version 4.12.4.27
Befehl sollte laut Docu:
saveTextFile(<list>, < filename>) //since 4.11.4.4: true: if list is succesfully written to file [W/L/M] see also : [saveTextFile]
ab der Version 4.11.4.4 Funktionieren.

Kann mir jemand sagen was ich anders machen kann?

Falls Jemand einen Besseren Vorschlag hat.
Diese Datei will ich manipulieren:

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1"?>
<cfg>
 <Config
  FilterDialChars="1"
  DialChars="+0123456789,;*#"
  TapiParams="0x00000000,,,3,,;"
  HostListenParams="8080,,0x0,0,,;"
  ValidIPNetworks=""
  UsePermanentLineIDs="0"
  SuppressOffering="0"
  NumLineKeys="8"
  SnomCSTA="0"
  Log="0,0,7,5000000,0,0,0,0000000061962599"
 />
 <Lines>
  <Line_1
   Channel="PJSIP/[NEBENSTELLE]"
   SrvPermID="1"
   SrvAlias="Asterisk"
   NameSuffix=""
   DisplayName="Tel-[NEBENSTELLE]"
   DisplayAddr="[NEBENSTELLE]"
   Flags="0x1002"
   InboundChannel=""
   OriginateContext="from-internal"
   OriginateChannel=""
   ExtStatusContext="ext-local"
   QmsLocation=""
   AutoAnswerMode="0"
   AutoAnswerInfo=""
   ConferenceRoom=""
   AddrList="1,,;"
  />
 </Lines>
</cfg>
Überall wo [NEBENSTELLE] steht soll die Nummer der Nebenstelle eingetragen werde,

Danke!
MfG Alexander
Tigger
Beiträge: 25
Registriert: 27 Jun 2018, 08:31

Re: FileExists und loadTextFile findet Existierende Datei nicht

Beitrag von Tigger »

Hallo,

Problem gelöst!

Code: Alles auswählen

if FileExists64($XMLFileOrg$)	
	set $XMLFileContent$ = loadTextFile($XMLFileOrg$)
	set $XMLFileContent$ = stringReplaceRegexInList($XMLFileContent$,'\[NEBENSTELLE\]', $ExtensionNumber$)
	if not(saveTextFile($XMLFileContent$,$XMLFileNew$))
		Message "failed to save " + saveTextFile($XMLFileContent$,$XMLFileNew$)
		LogError "failed saveTextFile"
		isFatalError "saveTextFile"
	endif
endif
Antworten