Registry Zeichenfolge je nach Bedingung ändern
Ich will folgendes erreichen:
Ein (VBS?)-Script soll prüfen, ob in der Registry unter
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
eine Zeichenfolge existiert, die "GinaDLL" heisst.
Ferner soll der WERT dieser Zeichenfolge geprüft werden.
Ist der Wert "csgina.dll", soll der User eine Meldung erhalten, die lautet
"Zur Zeit startet der Cisco VPN Client vor ihrer Windows Anmeldung. Möchten Sie stattdessen dass der Juniper VPN Client vor der Anmeldung an Ihrem PC gestartet wird damit Sie sich nach Aufbau der VPN Verbindung an Ihrer Domäne anmelden können?"
Wählt der User "Ja" soll der Wert der Zeichenfolgle "GinaDLL" geändert werden in "dsGinaLoader.dll".
Wählt der User "Nein" soll der Wert so bleiben wie er ist.
Ist der Wert der Zeichenfolge dagegen "dsGinaLoader.dll" soll der User den Hinweis erhalten:
"Zur Zeit startet der Juniper VPN Client vor ihrer Windows Anmeldung. Möchten Sie stattdessen dass der Cisco VPN Client vor der Anmeldung an Ihrem PC gestartet wird damit Sie sich nach Aufbau der VPN Verbindung an Ihrer Domäne anmelden können?"
Der User sollte auch wählen können, ob er keinen von beiden VPN Clients vor dem winlogen starten will.
Wenn er sich dazu entscheidet, muss die Zeichenfolge "GinaDLL" gelöscht werden und ein Hinweis kommen dass der PC neu gestartet werden soll.
Wenn die Zeichenfolge "GinaDLL" garnicht existiert, soll das Script den User fragen:
"Möchten Sie den Juniper VPN Client vor der Anmeldung an Ihrem Windows PC starten damit Sie sich direkt in Ihrer Domäne anmelden können?"
Ich denke ein Programmer kloppt das Script in 10 Min zusammen. Ich bräuchte geschätzte 3 Monate dafür.
Ein (VBS?)-Script soll prüfen, ob in der Registry unter
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
eine Zeichenfolge existiert, die "GinaDLL" heisst.
Ferner soll der WERT dieser Zeichenfolge geprüft werden.
Ist der Wert "csgina.dll", soll der User eine Meldung erhalten, die lautet
"Zur Zeit startet der Cisco VPN Client vor ihrer Windows Anmeldung. Möchten Sie stattdessen dass der Juniper VPN Client vor der Anmeldung an Ihrem PC gestartet wird damit Sie sich nach Aufbau der VPN Verbindung an Ihrer Domäne anmelden können?"
Wählt der User "Ja" soll der Wert der Zeichenfolgle "GinaDLL" geändert werden in "dsGinaLoader.dll".
Wählt der User "Nein" soll der Wert so bleiben wie er ist.
Ist der Wert der Zeichenfolge dagegen "dsGinaLoader.dll" soll der User den Hinweis erhalten:
"Zur Zeit startet der Juniper VPN Client vor ihrer Windows Anmeldung. Möchten Sie stattdessen dass der Cisco VPN Client vor der Anmeldung an Ihrem PC gestartet wird damit Sie sich nach Aufbau der VPN Verbindung an Ihrer Domäne anmelden können?"
Der User sollte auch wählen können, ob er keinen von beiden VPN Clients vor dem winlogen starten will.
Wenn er sich dazu entscheidet, muss die Zeichenfolge "GinaDLL" gelöscht werden und ein Hinweis kommen dass der PC neu gestartet werden soll.
Wenn die Zeichenfolge "GinaDLL" garnicht existiert, soll das Script den User fragen:
"Möchten Sie den Juniper VPN Client vor der Anmeldung an Ihrem Windows PC starten damit Sie sich direkt in Ihrer Domäne anmelden können?"
Ich denke ein Programmer kloppt das Script in 10 Min zusammen. Ich bräuchte geschätzte 3 Monate dafür.
Please also mark the comments that contributed to the solution of the article
Content-ID: 80352
Url: https://administrator.de/contentid/80352
Printed on: December 2, 2024 at 17:12 o'clock
2 Comments
Latest comment
Hallo e-m-d-k-h!
Versuch es mal damit:
Damit die User für die verschiedenen Optionen (Client beibehalten, ändern, entfernen) nur eine einzige Schaltfläche betätigen müssen, es andererseits in VBS in dieser Hinsicht nur beschränkte Möglichkeiten gibt, wirst Du hinsichtlich der Texte und Optionen vielleicht noch nachbessern wollen (zB immer "Ja" für "Juniper"), aber das Gerüst sollte so passen.
Die Alternative wäre ansonsten, zunächst abzufragen, ob ein bestehender Client entfernt werden soll und dann, in einer zweiten MessageBox, ob der Client gewechselt werden soll - auch nicht wirklich elegant, wie ich finde.
Haben übrigens die User das Recht, in HKLM zu schreiben?
Grüße
bastla
Ich denke ein Programmer kloppt das Script in 10 Min zusammen. Ich bräuchte geschätzte 3 Monate dafür.
Na ja, da ich kein Programmierer bin, war's bei mir ein Mittelwert ... Versuch es mal damit:
Const RROOT = "HKLM"
Const RKEY = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Const RVALUE = "GinaDLL"
Const JUNIPER = "dsGinaLoader.dll"
Const CISCO = "csgina.dll"
RPath = RROOT & "\" & RKEY & "\" & RVALUE
Set WshShell = WScript.CreateObject("WScript.Shell")
If RegistryValueExists(RROOT, RKEY, RVALUE) Then 'Reg-Wert vorhanden?
Value = WshShell.RegRead(RPath)
Select Case LCase(Value)
Case LCase(CISCO)
Choice = MsgBox("Zur Zeit startet der Cisco VPN Client vor ihrer Windows Anmeldung." & vbCrLF & vbCrLF & _
_
"Möchten Sie stattdessen, dass der Juniper VPN Client vor der Anmeldung an Ihrem PC gestartet wird," & vbCrLF & _
"damit Sie sich nach Aufbau der VPN Verbindung an Ihrer Domäne anmelden können?" & vbCrLF & vbCrLF & _
_
"Wählen Sie 'Ja' für Juniper, 'Abbrechen' für Cisco oder 'Nein' für das Entfernen des VPN Client", vbYesNoCancel + vbQuestion, "Juniper VPN Client starten?")
If Choice = vbYes Then
WshShell.RegWrite RPath, JUNIPER, "REG_SZ"
ElseIf Choice = vbNo Then
WshShell.RegDelete RPath
MsgBox "Sie müssen Ihren Rechner neu starten!", vbInformation, "Neustart erforderlich ..."
End If
Case LCase(JUNIPER)
Choice = MsgBox("Zur Zeit startet der Juniper VPN Client vor ihrer Windows Anmeldung." & vbCrLF & vbCrLF & _
_
"Möchten Sie stattdessen dass der Cisco VPN Client vor der Anmeldung an Ihrem PC gestartet wird," & vbCrLF & _
"damit Sie sich nach Aufbau der VPN Verbindung an Ihrer Domäne anmelden können?" & vbCrLF & vbCrLF & _
_
"Wählen Sie 'Ja' für Cisco, 'Abbrechen' für Juniper oder 'Nein' für das Entfernen des VPN Client", vbYesNoCancel + vbQuestion, "Cisco VPN Client starten?")
If Choice = vbYes Then
WshShell.RegWrite RPath, CISCO, "REG_SZ"
ElseIf Choice = vbNo Then
WshShell.RegDelete RPath
MsgBox "Sie müssen Ihren Rechner neu starten!", vbInformation, "Neustart erforderlich ..."
End If
Case Else 'sollte es nicht geben
MsgBox "Unbekannter Eintrag '" & Value & "' in der Registry." & vbCrLF & vbCrLF & _
"Bei riesigen Nebenwirkungen essen Sie eine Entschlackungsbeilage und schlagen Sie Ihren Arzt oder Administrator!", vbCritical, "Das darf doch wohl nicht wahr sein!"
' WshShell.RegDelete RPath 'Vielleicht besser löschen? Falls ja, Kommentarzeichen am Anfang der Zeile entfernen.
End Select
Else
Choice = MsgBox("Möchten Sie den Juniper VPN Client vor der Anmeldung an Ihrem Windows PC starten," & vbCrLF & "damit Sie sich direkt in Ihrer Domäne anmelden können?", vbYesNo + vbQuestion, "Juniper VPN Client starten?")
If Choice = vbYes Then
WshShell.RegWrite RPath, JUNIPER, "REG_SZ"
End If
End If
Function RegistryValueExists(LNGHKEY, strKey, strValue)
'auf Basis: http://www.visualbasicscript.com/m_35278/tm.htm
Const HKLM = &H80000002
Const HKCR = &H80000000
Const HKCU = &H80000001
Const HKUSERS = &H80000003
RegistryValueExists = False
If LNGHKEY = "HKLM" Then hkRoot = HKLM
If LNGHKEY = "HKCU" Then hkRoot = HKCU
If LNGHKEY = "HKCR" Then hkRoot = HKCR
If LNGHKEY = "HKUSERS" Then hkRoot = HKUSERS
Set reg = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
reg.EnumValues hkRoot, strKey, aValueNames, aValueTypes
If Not IsNull(aValueNames) Then
For Each s In aValueNames
If LCase(s)=LCase(strValue) Then
RegistryValueExists = True
Exit Function
End If
Next
End If
End Function
Die Alternative wäre ansonsten, zunächst abzufragen, ob ein bestehender Client entfernt werden soll und dann, in einer zweiten MessageBox, ob der Client gewechselt werden soll - auch nicht wirklich elegant, wie ich finde.
Haben übrigens die User das Recht, in HKLM zu schreiben?
Grüße
bastla