joshuatree
Goto Top

VBS-Script mit Benutzerdialog zum PW ändern in einer 2003er AD-Domäne

Hallo,

bin immer noch auf auf der Such nach einer Lösung um meinen Useren es zu ermöglichen ich komfortabel ihr AD Passwort zu ändern.
Anfangs wollte ein Progi bzw. CGI mit Perl basteln, davon bin ich weg jetzt hänge ich bei VBS.

Leider mit noch sehr wenig Erfahrung in VBS.

Gedacht ist es so das der user das Script startet, entweden eingebettet in einer HTML/HTA Seite oder direkt. Dazu sind ja bekanntlich ein paar Abfragen notwendig. Altes Passwort,
neues PW und PW wiederholung.
Das wollte ich jetzt mit dem folgenden Script tun
option explicit


dim username, passwort1, passwort2, objChild, objUser


Set objUser = GetObject _
("LDAP://cn=username,cn=users,dc=blabla,dc=blabla,dc=local")
objUser.ChangePassword "passwort1", "passwort2"


username=inputbox("Bitte eintragen","Username")
passwort1=inputbox("Passwort eingeben","Passwort 1")
passwort2=inputbox("Bitte Passwort wiederholen","Passwort 2")


Beim LDAP-Bind im Pfad würde ich gerne eine Variable verwenden,
das blöde Script erzählt mir aber das es dieses Objekt nicht gibt. Klar
im AD existiert kein 'Username' das soll die Variable bei der Abfrage bringen
genau so beim Passwort1 und Passwort2.

Kann mir mal jemand einen hint geben. Dreh noch durch mit dem Mist.


Offtopic:
Brauche ein gescheites Buch über VBS, kennt jemand eins? face-wink


Gruss
Andreas

Content-Key: 32689

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

Printed on: April 23, 2024 at 10:04 o'clock

Member: maneich
maneich May 17, 2006 at 12:50:49 (UTC)
Goto Top
Hallo,

wenn Du die 3 InputBox Zeilen vor die Zeile Set objUser = GetObject setzt, müßte es klappen.

So kann es ja nichts werden, da die Variablem noch nicht definiert sind.

Du könntest höchstenfalls mit Functions arbeiten, dann wird direkt im AP abgefragt :


Set objUser = GetObject _
("LDAP://cn=username,cn=users,dc=blabla,dc=blabla,dc=local")
objUser.ChangePassword pw_old_new


Function username
username = InbutBox("Bitte eingeben: Username ")
End Function

Function pw_old_new
pw1 = InputBox("Eingabe altes Passwort: ")
pw2 = InputBox("eingabe neues Passwort: ")
pw_old_new = pw1, pw2
End Function
Member: JoshuaTree
JoshuaTree May 17, 2006 at 13:00:57 (UTC)
Goto Top
Hi,

danke für die Hilfe.

Beim Testen erzählt er mir a nach pw_old_new = pw1, pw2 wird ein Abschluss erwartet und b "C:\test.vbs(1, 1) (null): Ein solches Objekt ist auf dem Server nicht vorhanden."

Ne Idee. Bla bla habe ich natürlich dur die Domäne ersetzt
Member: maneich
maneich May 17, 2006 at 14:55:07 (UTC)
Goto Top
Hallo,

das a) war natürlich ein Fehler von mir, Zeichen zwischen Variablen müßen in Hochkomma gesetzt werden. Diese Zeile muß dann so aussehen:

pw_old_new = pw1 & ", " & pw2

Zu b) kann ich nur raten:

C:\Test.vbs ist der Name Deines Scripts.

(1,1) ist die Zeilen- und ZeichenStelle und (null) bedeutet objUser ist leer.

Wenn "Set objUser = GetObject" die erster Zeile ist mußt Du dahinter einen Unterstrich setzen, da die zweite Zeile eigentlich zur ersten gehört und die Verbindung durch dieses "_" Zeichen erkannt wird. Also

Set objUser = GetObject "_"
("LDAP:cn=username,cn=users,dc=blabla,dc=blabla,dc=local")

könntest theoretisch auch schreiben

Set objUser = GetObject("LDAP:
cn=username,cn=users,dc=blabla,dc=blabla,dc=local")

Diese Zeichen natürlich ohne Hochkomma wird aber hier nicht anders dargestellt.

MfG maneich
Member: JoshuaTree
JoshuaTree May 23, 2006 at 13:25:30 (UTC)
Goto Top
Weitere deppenfrage face-smile wie stelle ich den ein Komma oder ähnliches zwischen
zwei Variablen dar?

Like this: MsgBox pw1,pw2

pw1 und 2 sind Variablen dazwischen hätte ich gerne ein Komma oder sonst was.


und noch was.
muß man in VB-Script irgend ein Zeichen abschneiden nach der Abrage eines Parameters durch eine inputbox.
Bei Perl muß man bei der <STDIN> das CR/LF durch ./n abtrennen.
Denn ich bekomme ständig die Fehlermeldung das der Parameter der übergeben wird nicht mit dem Orginal übereinstimmt. Das habe ich natürlich überprüft und das Orgingal ist gleich der Eingabe in die Inputbox.

*grübel*

Thx
Andreas
Member: maneich
maneich May 23, 2006 at 18:00:45 (UTC)
Goto Top
Hallo,

nun ja, wenn Du Dir meinen letzten Thread genau anschaust, kannst Du das, was Du heute als Frage stellst, bei "pw_old_new..." erkennen.

Deine zweite Frage verstehe ich nicht ganz. Abtrennen oder abschneiden muß man in VBS nichts, z.B.:

x = InputBox("eingabe Parameter x:")

was in Klammer steht wird angezeigt und auf eine Eingabe gewartet.

Mußt evtl. mal das Original einlesen und anzeigen lassen, evtl. auch die Stringlänge vergleichen. Möglicherweise hat das Original vorne oder hinten noch eine Leerstelle oder Du übergibst in der InputBox nicht die richtige Länge.

MfG maneich
Member: JoshuaTree
JoshuaTree May 30, 2006 at 08:07:07 (UTC)
Goto Top
@maneich

sory wer lesen kann.... face-wink


Das mit dem abschneiden der cr/lf (carriage return/line feet) ist dann wohl nur beim Perl
schade auch aber dann bin ich immer noch nicht da wo ich hin will.

*
call main


Sub main()

WshUserName = InputBox ("Bitte eingeben: Username ")
'Set WshShell = WScript.CreateObject("WScript.Shell")
'WshUserName= WshShell.ExpandEnvironmentStrings("%username%")
MsgBox WshUserName

pw1 = InputBox("Eingabe altes Passwort: ")
pw2 = InputBox("eingabe neues Passwort: ")
pw_old_new = "pw1, pw2"

Set objUser = GetObject("LDAP://cn=" & WshUserName & ",cn=users,dc=bla,dc=bla,dc=local")
objUser.ChangePassword "pw1", "pw2"

End Sub


pw1 soll dem alten Passwort entsprechen debugger erzählt mir das das PW falsch ist, ist es aber nicht
dehalb vermutete ich das irgend ein unsichtbares Zeichen übertragen wird das mir die Suppe versalzt.

Jemand eine idee?
Member: maneich
maneich May 30, 2006 at 18:54:10 (UTC)
Goto Top
Hallo,

pw1 bzw. pw2 sind Variable.

Wenn Du diese mit Hochkomma angibst "pw1", liest VBS nur pw1 (also den Variablennamen) und nicht den Inhalt.

Variable müßten ohne Hochkomma erkannt werden; ansonsten wenn trotzdem Hochkomma verlangt werden, dann so

Chr(34) & pw1 & Chr(34)

Damit wird der Inhalt von pw1 gelesen und in Hochkomma gesetzt.

MfG maneich
Member: JoshuaTree
JoshuaTree May 31, 2006 at 08:31:35 (UTC)
Goto Top
dein eine Problem Geht das neu kommt


so funktioniert es :

Call main


Sub main()
Dim pw_old_new
WshUserName = InputBox ("Bitte eingeben: Username ")

pw1 = InputBox("Eingabe altes Passwort: ")
pw2 = InputBox("Bitte Passwort wiederholen")
pw_old_new = pw1 & "," & pw2


Set objUser = GetObject("LDAP://cn="& WshUserName &",cn=users,dc=bla,dc=bla,dc=local")
objUser.ChangePassword pw_old_new

End Sub
**

Jedoch erwartet die AD-Schnittstelle Hochkommas like this:
objUser.ChangePassword "i5A2sj*!", "jl3R86df"

Parameter 1 ist altes Passwort Parameter 2 ist neues Passwort.

Wie bekomme ich jetzt die Hochkommas um ----pw_old_new = pw1 & "," & pw2-----.

Im Moment stellt er das so dar: pw1,pw2
So wie ursprünglich gewünscht. ADSI will aber es so : "pw1", "pw2"

Hilfeeeee face-smile

PS:
Brauche immer noch ein Buch über VB-Script, bitte um eine Empfehlung.
Member: maneich
maneich May 31, 2006 at 11:14:58 (UTC)
Goto Top
Hallo,

war doch bereits genau erklärt:

pw_old_new = Chr(34) & pw1 & Chr(34) & ", " & Chr(34) & pw2 Chr(34)

wenn Komma ebenfalls in Hochkomma gesetzt sein muß dann:

pw_old_new = Chr(34) & pw1 & Chr(34) & "", "" & Chr(34) & pw2 Chr(34)

MfG maneich
Member: JoshuaTree
JoshuaTree May 31, 2006 at 11:45:47 (UTC)
Goto Top
Was ist der Unterschied zwischen der Benutzung von chr(34) und dem Anführungszeichen(hochkommas)?
Wenn ich die Komma so rein schreibe erzählt er mir "Anweisungsende erwartet" in der Zeile !?

danke für deine Hilfe
Member: n4426
n4426 Jun 19, 2006 at 18:46:19 (UTC)
Goto Top
Hallo,

hab mal ne frage.

Ist es möglich, das bei der eingabe das Passwort nicht im Klartext (123456789) angezeigt wird, sondern als Sternrech (*)? Dann währe nicht schlecht, wenn er das neue Passwort zweimal abfrag und dann überprüft, ob es identisch ist.

Hat eine von euch ne idee?

mfg
andi
Member: JoshuaTree
JoshuaTree Jun 21, 2006 at 12:25:31 (UTC)
Goto Top
Hi,

ja das geht wenn du es mit HTA bzw. hmtl abfackelst und als <input type="password"> nimmst.

Gruss
Andreas