sergio1993
Goto Top

Firefox NTLM Authentification, VBScript um Werte zu ergänzen

Hallo Miteinander

Wie ihr sicher schon im Titel gesehen habt, habe ich ein Problem mit dem Programmieren eines VBScript.

Ich möchte folgendes machen:

Firefox erstellt auf dem Computer einen Profile und dort hat er das sogennannte prefs.js file.
Dort werden alle Änderungen gespeichert, die der Benutzer im Firefox vornimmt.

In dieser Datei muss ich ein Befehl hinzufügen oder abändern.
Also soll das Programm zuerst schauen ob der Befehl "network.automatic-ntlm-auth.trusted-uris" schon vorhanden ist oder nicht.

Ist er vorhanden, müssen Werte dem Befehl hinzugefügt werden, ohne das die vorhandenen gelöst werden.
z.B. steht "user_pref("network.automatic-ntlm-auth.trusted-uris", "gs-galaxy,Google");" und es muss z.B. Yahoo hinzugefügt werden.
Dann üsste das am schluss folgendermasse aussehen: user_pref("network.automatic-ntlm-auth.trusted-uris", "gs-galaxy,Google,Yahoo");
Noch dazu soll es nachschauen ob der Begriff nicht schon vorhanden ist. Es soll also nicht zwei Mal das gleiche stehen.

Ist es nicht vorhanden, soll es einfach den Befehl hinzufügen: user_pref("network.automatic-ntlm-auth.trusted-uris", "gs-galaxy,Google,Yahoo,Mozilla,usw.");

Ich hoffe ihr könnt mir helfen und falls ihr noch fragen habt, einfach fragen.


Gruss Sergio

Content-Key: 164567

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: bastla
bastla Apr 14, 2011 at 22:23:28 (UTC)
Goto Top
Hallo sergio1993!

Zum Testen (es wird eine "prefs.js" im Testpfad "D:\TEMP" vorausgesetzt - siehe Zeile 26):
Values = Array("gs-galaxy", "Google", "Yahoo", "Mozilla", "usw.")  
Setting = "user_pref(""network.automatic-ntlm-auth.trusted-uris"""  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set Sh = CreateObject("WScript.Shell")  
'prefs.js suchen:  
'Profilpfad ermitteln  
FFPath = Sh.ExpandEnvironmentStrings("%Appdata%") & "\Mozilla\Firefox"  
'"profiles.ini" einlesen ...  
IniLines = Split(fso.OpenTextFile(FFPath & "\profiles.ini").ReadAll, vbCrLf)  
'... und nach Zeile "Path=..." durchsuchen  
For Each Line In IniLines
    If Left(Line, 5) = "Path=" Then  
        FFProfilesPath = Trim(Mid(Line, 6))
        Exit For
    End If
Next
PrefsPath = FFPath & "\" & FFProfilesPath & "\prefs.js"  
'falls keine "prefs.js" gefunden wurde, Abbruch  
If Not fso.FileExists(PrefsPath) Then WScript.Quit 1

'#############################  
'Ausgabe des Pfades  
MsgBox PrefsPath
' zum Testen Kopie der "prefs.js" verwenden  
PrefsPath = "D:\TEMP\prefs.js"  
'#############################  

'"prefs.js" komplett in Array einlesen ...  
PrefsLines = Split(fso.OpenTextFile(PrefsPath).ReadAll, vbCrLf)
'... und nach dem gewünschten "Settings-String" durchsuchen  
For i = 0 To UBound(PrefsLines)
    If InStr(PrefsLines(i), Setting) > 0 Then
        'gefunden: Zeilennummer merken und Schleife verlassen  
        LineNo = i
        Exit For
    End If
Next

'Wenn Zeile bereits vorhanden war, ...  
If LineNo <> 0 Then
    '... gesamte Zeile auslesen  
    SettingLine = PrefsLines(LineNo)
    'bereits vorhandene Werte isolieren  
    '(dazu Aufteilung der Zeile anhand der Anführungszeichen)  
    SettingValues = Trim(Split(SettingLine, """")(3))  
    'alle gewünschten Werte durchgehen  
    For Each Value In Values
        'Wert noch nicht vorhanden  
        If InStr(SettingValues, Value) = 0 Then
            ' ... daher: hinzufügen  
            SettingValues = SettingValues & "," & Value  
        End If
    Next
    'Zeile neu zusammenbauen  
    PrefsLines(LineNo) = Setting & ", """ & SettingValues & """);"  
    'gesamte "prefs.js" wieder aus Array zusammensetzen  
    PrefsLinesNew = Join(PrefsLines, vbCrLf)
Else
    'gesuchte Zeile noch nicht vorhanden,  
    'daher mit allen gewünschten Werten neu erstellen  
    PrefsLinesNew = Join(PrefsLines, vbCrLf) & vbCrLf & _
        Setting & ", """ & Join(Values, ",") & """);"  
End If

'"prefs.js" schreiben  
fso.CreateTextfile(PrefsPath).Write PrefsLinesNew
Die Zeilen 22 bis 27 dienen nur dem Testen und können dann später ersatzlos entfernt werden.

Grüße
bastla
Member: sergio1993
sergio1993 Apr 15, 2011 at 06:24:08 (UTC)
Goto Top
Hallo bastla

Danke für alles! Es Funktioniert alles einwandfrei ;)
Du bist meine Rettung. Habe gestern nämmlich den ganzen Tag rumprobiert aber einfach nicht hingekriegt.

Danke und Gruss
Sergio
Member: bastla
bastla Apr 15, 2011 at 10:13:16 (UTC)
Goto Top
Hallo sergio1993!

Freut mich, wenn's soweit passt ... face-smile

... allerdings wäre noch anzumerken, dass alle Vergleiche case-sensitive sind, und dass die Struktur der Zeile den Vorgaben entsprechen muss (siehe vor allem den Suchbegriff in der Variablen "Setting") ...

Grüße
bastla
Member: doschtinator
doschtinator May 29, 2011 at 18:27:26 (UTC)
Goto Top
Hallo bastla,

ich habe mich heute eine ganze Weile mit einer Lösung für ein ähnliches Problem herumgeschlagen. Nach dem ich fast fertig war, bin ich auf diesen Eintrag gestoßen. SUPER! Denn genau die Sache mit dem "network.automatic-ntlm-auth.trusted-uris" - Eintrag gilt auch für mich. Habe das oben dargestellte Skript genommen und alles funktioniert wunderbar wie beschrieben.
Allerdings benötige ich noch zwei weitere Einträge die überprüft bzw. geändert werden müssten. Dies sind boolsche Variablen und lauten

user_pref("network.automatic-ntlm-auth.allow-proxies", false);

und

user_pref("network.negotiate-auth.allow-proxies", false);

Also ähnlich wie bei sergio1993 soll die prefs.js auf die Einträge überprüft werden und falls nicht vorhanden ergänzt, bzw. falls vorhanden geändert werden. Da ich mit meiner Lösung sehr amateurhafte Arbeit geleistet habe, hoffe ich auf einen weiteren Tipp oder Hinweis. Wäre toll, wenn man dies noch irgendwie in das schon vorhandene Skript einbauen könnte.
Leider bin ich im VBScript schreiben ein absoluter Anfänger und muss mich erst einmal durch das schon vorhandene Skript durcharbeiten, um überhaupt zu verstehen an welcher Stelle was genau passiert. Daher wäre ich über jede Hilfe dankbar!

Gruß

doschtinator
Member: doschtinator
doschtinator Jun 02, 2011 at 16:58:48 (UTC)
Goto Top
Hallo,

habe für mich jetzt doch eine funktionierende Lösung gefunden, die sehr an der obigen angelehnt ist. Ist unter Umständen so nicht perfekt programmiert, aber es funktioniert und das ist mir zuerst einmal am Wichtigsten face-smile


Values = Array("http://s1")
Setting = "user_pref(""network.automatic-ntlm-auth.trusted-uris"""
Setting2 = "user_pref(""network.automatic-ntlm-auth.allow-proxies"""
Setting3 = "user_pref(""network.negotiate-auth.allow-proxies"""

Set fso = CreateObject("Scripting.FileSystemObject")
Set Sh = CreateObject("WScript.Shell")

' #######################################################
'prefs.js suchen:
'Profilpfad ermitteln
FFPath = Sh.ExpandEnvironmentStrings("%Appdata%") & "\Mozilla\Firefox"
'"profiles.ini" einlesen ...
IniLines = Split(fso.OpenTextFile(FFPath & "\profiles.ini").ReadAll, vbCrLf)
'... und nach Zeile "Path=..." durchsuchen
For Each Line In IniLines
If Left(Line, 5) = "Path=" Then
FFProfilesPath = Trim(Mid(Line, 6))
Exit For
End If
Next
PrefsPath = FFPath & "\" & FFProfilesPath & "\prefs.js"
'falls keine "prefs.js" gefunden wurde, Abbruch
If Not fso.FileExists(PrefsPath) Then MsgBox "Datei prefs.js nicht vorhanden!", vbExclamation, "Fehlende prefs.js"
If Not fso.FileExists(PrefsPath) Then WScript.Quit 1

' ########################################################
'"prefs.js" komplett in Array einlesen ...
PrefsLines = Split(fso.OpenTextFile(PrefsPath).ReadAll, vbCrLf)

' ########################################################
'... und nach dem gewünschten "Settings-String" durchsuchen
For i = 0 To UBound(PrefsLines)
If InStr(PrefsLines(i), Setting) > 0 Then
'gefunden: Zeilennummer merken und Schleife verlassen
LineNo = i
Exit For
End If
Next
'Wenn Zeile bereits vorhanden war, ...
If LineNo <> 0 Then
'... gesamte Zeile auslesen
SettingLine = PrefsLines(LineNo)
'bereits vorhandene Werte isolieren
'(dazu Aufteilung der Zeile anhand der Anführungszeichen)
SettingValues = Trim(Split(SettingLine, """")(3))

'alle gewünschten Werte durchgehen
For Each Value In Values
'Wert noch nicht vorhanden
If InStr(SettingValues, Value) = 0 Then
' ... daher: hinzufügen
SettingValues = SettingValues & "," & Value
End If
Next
'Zeile neu zusammenbauen
PrefsLines(LineNo) = Setting & ", """ & SettingValues & """);"
'gesamte "prefs.js" wieder aus Array zusammensetzen
PrefsLinesNew = Join(PrefsLines, vbCrLf)
Else
'gesuchte Zeile noch nicht vorhanden,
'daher mit allen gewünschten Werten neu erstellen
PrefsLinesNew = Join(PrefsLines, vbCrLf) & vbCrLf & _
Setting & ", """ & Join(Values, ",") & """);"
End If
'"prefs.js" schreiben
fso.CreateTextfile(PrefsPath).Write PrefsLinesNew

' ########################################################
'"prefs.js" komplett in Array einlesen ...
PrefsLines = Split(fso.OpenTextFile(PrefsPath).ReadAll, vbCrLf)

' #############################################################
'... und nach dem gewünschten "Settings2-String" durchsuchen
For i = 0 To UBound(PrefsLines)
If InStr(PrefsLines(i), Setting2) > 0 Then
'gefunden: Zeilennummer merken und Schleife verlassen
LineNo = i
Exit For
End If
Next
'Wenn Zeile bereits vorhanden war, ...
If LineNo <> 0 Then
'... gesamte Zeile auslesen
SettingLine = PrefsLines(LineNo)
'bereits vorhandene Werte auslesen
'(dazu Aufteilung der Zeile anhand der Anführungszeichen)
SettingValues = Split(SettingLine, ",") 'ergibt true); oder false); als Ausgabe
' Der Wert wird der Variablen bool übergeben
bool = (SettingValues(1))
' Falls die Variable den Wert true hat, wird dieser in false gedreht
if bool = " true);" then
bool = " false);"
End if

'Zeile neu zusammenbauen
PrefsLines(LineNo) = Setting2 & "," & bool
'gesamte "prefs.js" wieder aus Array zusammensetzen
PrefsLinesNew = Join(PrefsLines, vbCrLf)

Else
'gesuchte Zeile noch nicht vorhanden,
'daher mit allen gewünschten Werten neu erstellen
PrefsLinesNew = Join(PrefsLines, vbCrLf) & vbCrLf & "user_pref(""network.automatic-ntlm-auth.allow-proxies"", false);"
End If

'"prefs.js" schreiben
fso.CreateTextfile(PrefsPath).Write PrefsLinesNew

' ########################################################
'"prefs.js" komplett in Array einlesen ...
PrefsLines = Split(fso.OpenTextFile(PrefsPath).ReadAll, vbCrLf)

' ##############################################################
'... und nach dem gewünschten "Settings3-String" durchsuchen
For i = 0 To UBound(PrefsLines)
If InStr(PrefsLines(i), Setting3) > 0 Then
'gefunden: Zeilennummer merken und Schleife verlassen
LineNo = i
Exit For
End If
Next
'Wenn Zeile bereits vorhanden war, ...
If LineNo <> 0 Then
'... gesamte Zeile auslesen
SettingLine = PrefsLines(LineNo)
'bereits vorhandene Werte auslesen
'(dazu Aufteilung der Zeile anhand der Anführungszeichen)
SettingValues = Split(SettingLine, ",") 'ergibt true); oder false); als Ausgabe
' Der Wert wird der Variablen bool übergeben
bool = (SettingValues(1))
' Falls die Variable den Wert true hat, wird dieser in false gedreht
if bool = " true);" then
bool = " false);"
End if

'Zeile neu zusammenbauen
PrefsLines(LineNo) = Setting3 & "," & bool
'gesamte "prefs.js" wieder aus Array zusammensetzen
PrefsLinesNew = Join(PrefsLines, vbCrLf)

Else
'gesuchte Zeile noch nicht vorhanden,
'daher mit allen gewünschten Werten neu erstellen
PrefsLinesNew = Join(PrefsLines, vbCrLf) & vbCrLf & "user_pref(""network.negotiate-auth.allow-proxies"", false);"
End If

'"prefs.js" schreiben
fso.CreateTextfile(PrefsPath).Write PrefsLinesNew

' ##############################################################

MsgBox "Datei erfolgreich geändert!" , vbInformation ,"Ergänzung prefs.js"