bammboole
Goto Top

Probleme mit vbs zum erstellen von Usern

Hi erstma,

also ich hab eigentlich kein schimmer von scipten aber etwas belesen, copy&pase und nach dem 5 Testdurchlauf hab ich solche probleme meisten shinbekommen... aber nun weiß ich nicht mehr weiter.

Diese Script findet man sehr oft im Netz. Mit unterschidelichsten Ausbaustufen. Und mein script funktioniert soweit eigentlich auch. Die Benutzer werden alle wie gewollt erstellt. Aber die übergabe an "verz.cmd" funktioniert nicht. Hier erstma das script:

benutzer_anegen.txt
Dim fso, f, Zeile, Feld
Set fso = CreateObject("Scripting.FileSystemObject")  
Set f = fso.OpenTextFile ("schueler.txt",1,0)  

Do while not f.AtEndOfLine
Zeile = f.readLine
Feld = split(Zeile,",")  
Benutzer = Feld(1)
Vorname = Feld(0)
Nachname = Feld(1)
Passwort = Feld(2)
accountname = left(Vorname,3) & "." & Benutzer  
Call BenuntzerAnlegen(Benutzer,Vorname,Nachname,Passwort)
Loop
f.Close
Wscript.Quit(0)

Sub BenuntzerAnlegen(Benutzer,Vorname,Nachname,Passwort)
Dim ouo, b
Set ouo = GetObject("LDAP://OU=Klassen,OU=Zöschen,DC=zoeschen,DC=local")  
Set b = ouo.Create("user", "CN=" & Vorname & " " & Nachname)  
Dim WshShell, ret
Set WshShell = WScript.CreateObject("WScript.Shell")  
b.Put "sAMAccountName", accountname  
b.Put "displayName", Vorname & " " & Nachname  
b.Put "givenName", Vorname  
b.Put "sn", Nachname  
b.Put "description", "Schüler"  
b.Put "userAccountControl", 66082  
b.Put "profilePath", "\\winsrv08R2-DC\Schueler$\" & accountname  
b.Put "homeDirectory", "\\winsrv08R2-DC\Schueler_H$\" & accountname  
b.Put "homeDrive", "H:"  
b.TerminalServicesProfilePath = "\\winsrv08R2-DC\Schueler$\" & accountname  
b.TerminalServicesHomeDirectory = "\\winsrv08R2-DC\Schueler_H$\" & accountname  
b.TerminalServicesHomeDrive = "H:"  
b.SetInfo
b.SetPassword Passwort
b.AccountDisabled = False
b.SetInfo
WScript.Sleep(1000)
ret = WshShell.Run ("verz.cmd" & accountname,0,1)   

verz.cmd
mkdir \\winsrv08R2-DC\Schueler$\%1$
echo J | cacls \\winsrv08R2-DC\Schueler$\%1$ /C /E /G Administratoren:F
echo J | cacls \\winsrv08R2-DC\Schueler$\%1$ /C /E /G domaene\%1:F
echo J | cacls \\winsrv08R2-DC\Schueler$\%1$ /C /E /G Lehrer:F
echo J | cacls \\winsrv08R2-DC\Schueler$\%1$ /C /E /R Jeder
mkdir \\winsrv08R2-DC\Schueler_H$\%1$
echo J | cacls \\winsrv08R2-DC\Schueler_H$\%1$ /C /E /G Administratoren:F
echo J | cacls \\winsrv08R2-DC\Schueler_H$\%1$ /C /E /G domaene\%1:F
echo J | cacls \\winsrv08R2-DC\Schueler_H$\%1$ /C /E /G Lehrer:F
echo J | cacls \\winsrv08R2-DC\Schueler_H$\%1$ /C /E /R Jeder

Also, wie gesagt: Die benutzer werden erstellt (wenn ich "verz.cmd" nicht einbinde). Und die cmd funktioniert alleine auch... erstellt halt aber nur einen Ordner. Aber wenn ich "verz.cmd" einbinde, bekomme ich die Fehlermeldung: "Das System kann die angegebene Datei nicht finden:" und verweist auf die vorletzte Zeile.
Hab keine Idee warum das so ist. Jemand ne Idee?

btw: Falls ihr noch andere Fehler findet bzw. andere Lösungen habt... nur zu ;)

[Edit Biber] Codeformatierung [/Edit]

Content-Key: 183238

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

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

Member: Biber
Biber Apr 07, 2012 at 18:38:57 (UTC)
Goto Top
Moin Bammboole,

willkommen im Forum.

Hast du schon mal versucht, in der Zeile 41 des VBS.Schnipsels ein Leerzeichen zwischen dem CMD-Dateinamen und dem 1. Parameter einzufügen?
ret = WshShell.Run ("verz.cmd " & accountname,0,1)

Außerdem muss der CMD-Krams auch im Verzeichnis sein, aus dem der VBS-Schnipsel gestartet wird, solange du ihn ohne Pfadangabe aufrufst.
Andernfalls käme eine Meldung wie "Das System kann die angegebene Datei nicht finden:"

Grüße
Biber
Member: Bammboole
Bammboole Apr 07, 2012 at 19:43:33 (UTC)
Goto Top
Hi,

und Danke erstma das einer Antwortet ;)

Also alle drei Datein liegen im root von C. Hatte auch schon probiert den pfad anzugeben, hat aber auch nix gebracht.
Was mich halt wundert.... Dieses Script fliegt halt in tausend Foren rum und scheinbar hatte diesen fehler noch nie einer face-sad. Es peilt zwar keiner das die es an ihr Domain anpassen müssen aber das mit der drecks verz.cmd scheint bei allen zu klappen.....

Was du jetzt mit dem Leerzeichen meinst? Da is doch eins ;)
btw.: Damit ich nich Dumm sterbe... was bedeutet das mit ,0,1 nach dem Übergabewert? Hab das nur so Übernommen.
Mitglied: 106009
106009 Apr 07, 2012 at 20:05:24 (UTC)
Goto Top
Hi,

vermutlich stört das $-Zeichen hinter dem Benutzernamen (%1$)

Um deine an Biber gestellte Frage zu beantworten:
http://ss64.com/vb/run.html

Gruß

Edit: Formulierung geändert.
Member: bastla
bastla Apr 07, 2012 at 21:13:55 (UTC)
Goto Top
Hallo @all und willkommen im Forum, Bammboole!

Biber hat natürlich mit dem fehlenden Leerzeichen recht - und zum Testen würde ich ohnehin nur
ret = WshShell.Run("verz.cmd " & accountname, 1, 1)
verwenden - noch "pause" an das Ende des Batches, und dann lässt sich auch eher ablesen, wo es klemmt ...
btw.: Damit ich nich Dumm sterbe... was bedeutet das mit ,0,1 nach dem Übergabewert? Hab das nur so Übernommen.
Die 0 steht für "Fenster verstecken" (würde ich, wie gesagt, speziell in der Testphase nicht verwenden) und die 1 für "Warte auf das Ende des Batches" ...
BTW: Leerzeichen im "accountname" gibt's ja wohl hoffentlich nicht ...
@106009
vermutlich stört das $-Zeichen hinter dem Benutzernamen (%1$)
Eher nicht ...

Wie lautet übrigens dann die Antwort auf Bibers Frage?

[OT]
Diese Script findet man sehr oft im Netz.
Oh ja, und ich finde es jedes Mal aufs Neue lustig, wenn ich "Sub BenuntzerAnlegen" lese ... face-wink

Wer wohl dieses Osterei da versteckt hat?
[/OT]

Grüße
bastla
Mitglied: 106009
106009 Apr 07, 2012 at 21:31:44 (UTC)
Goto Top
Zitat von @bastla:
@106009
> vermutlich stört das $-Zeichen hinter dem Benutzernamen (%1$)
Eher nicht ...

Ich hab's lokal (ohne Rechnernamen) probiert, da stört das Zeichen definitiv. Meldet sich der neue Benutzer an, wird der Profilpfad nicht gefunden und ein neuer ohne das $-Zeichen angelegt, ergo kann calcs nicht funktionieren: "Das System kann die angegebene Datei nicht finden."

Wie lautet übrigens dann die Antwort auf Bibers Frage?
Ich habe an Biber nichts zu antworten, aber um Missverständnisse auszuräumen, den Beitrag editiert :-P

Gruß
Member: bastla
bastla Apr 07, 2012 at 21:35:14 (UTC)
Goto Top
@106009
Meldet sich der neue Benutzer an, wird der Profilpfad nicht gefunden
Der TE hat doch das Problem schon beim Anlegen des Benutzers - von Anmeldung ist da noch überhaupt nicht die Rede (und "cacls" würde ohnehin nicht der neue Benutzer ausführen)...

Grüße
bastla

P.S.: Editieren kann ich auch ... face-wink
Member: Bammboole
Bammboole Apr 07, 2012 at 21:48:26 (UTC)
Goto Top
OK nice... dat funkt schon ma. DANKE!!!
Ein verdammtes Leerzeichen ,man, man, man ;)

Aber... ein neus/weiters Problem aufgetaucht.

Die ordner werden zwar erstellt (allerdings mit nem $ hinterm namen) aber die Rechtezuordnung wird scheinbar nicht richtig (wenn Überhaupt) durchgefürt. Denn der neue Benutzer steht nicht drin.
Zudem wird, soblad ich mit mit dem Testaccount am TS anmelde, einer neuer Profilordner erstellt der dann zb. tes.test.v2 heißt. Wo dann kein Besitzer drin ist und ich als Admin keine rechte habe. Und das wird dem Lehrer der das dann nutzen will sicher nicht gefallen.

Das soll nicht so sein. Oder?
Mitglied: 106009
106009 Apr 07, 2012 at 21:49:15 (UTC)
Goto Top
@bastla
Das hat er aber anders beschrieben:
Zitat von @Bammboole:
Die benutzer werden erstellt (wenn ich "verz.cmd" nicht einbinde). Und die cmd funktioniert alleine
auch... erstellt halt aber nur einen Ordner. Aber wenn ich "verz.cmd" einbinde, bekomme ich die Fehlermeldung: "Das
System kann die angegebene Datei nicht finden:

Und genau das kann ich hier mit cacls reproduzieren, inzwischen auch mit 'ner Freigabe incl. Computernamen probiert.
Ohne das $-Zeichen funktioniert es wie es soll.

Da ich aber keinen Server zur Verfügung habe, an dem ich es real ausprobieren kann, klinke ich mich hier aus.

Gruß
Member: bastla
bastla Apr 07, 2012 at 21:55:22 (UTC)
Goto Top
@106009
Interpretationssache - für mich wurde das Script ohne und mit Aufruf der "verz.cmd" getestet ("wenn ich "verz.cmd" nicht einbinde" / "wenn ich "verz.cmd" einbinde") - wissen kann's aber nur der TE ...

Grüße
bastla
Member: Bammboole
Bammboole Apr 07, 2012 at 21:59:20 (UTC)
Goto Top
Nich streiten ;)

OK, den Fehler mit $ hinter dem Ordnernamen zieh ich zurück... steht ja auch so in cmd... also kein fehler face-smile

Aber warum wird ein neuer Profilordner erstellt mit .V2 am ende.
Und ist ein fehler bei den cacls befehlen? Den die da funktioniert nicht so wirklich. Die neuen ordner bekommen die selben Rechte wie der Übergeordnete Freigabeordner.
Member: bastla
bastla Apr 07, 2012 at 22:07:29 (UTC)
Goto Top
Hallo Bammboole!
Aber warum wird ein neuer Profilordner erstellt mit .V2 am ende.
Ist bereits seit Vista so ...
Und ist ein fehler bei den cacls befehlen? Den die da funktioniert nicht so wirklich.
Ich sehen keinen Fehler - hast Du es schon mit der zusätzlichen Zeile
pause
am Ende des Batches versucht? Poste doch mal, was im CMD-Fenster (an Meldungen) angezeigt wird ...

Grüße
bastla
Member: Bammboole
Bammboole Apr 07, 2012 at 22:13:47 (UTC)
Goto Top
hmmm... Also mit Pause. Ausführung von verz.cmd

C:\>mkdir \\winsrv08R2-DC\Schueler$\tes.test

C:\>echo J | cacls \\winsrv08R2-DC\Schueler$\tes.test /C /E /G Administratoren
:F
Bearbeitetes Verzeichnis: \\winsrv08R2-DC\Schueler$\tes.test

C:\>echo J | cacls \\winsrv08R2-DC\Schueler$\tes.test /C /E /G domaene\tes.tes
t:F
Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt.

C:\>echo J | cacls \\winsrv08R2-DC\Schueler$\tes.test /C /E /G Lehrer:F
Bearbeitetes Verzeichnis: \\winsrv08R2-DC\Schueler$\tes.test

C:\>echo J | cacls \\winsrv08R2-DC\Schueler$\tes.test /C /E /R Jeder
Bearbeitetes Verzeichnis: \\winsrv08R2-DC\Schueler$\tes.test

C:\>mkdir \\winsrv08R2-DC\Schueler_H$\tes.test

C:\>echo J | cacls \\winsrv08R2-DC\Schueler_H$\tes.test /C /E /G Administrator
en:F
Bearbeitetes Verzeichnis: \\winsrv08R2-DC\Schueler_H$\tes.test

C:\>echo J | cacls \\winsrv08R2-DC\Schueler_H$\tes.test /C /E /G domaene\tes.t
est:F
Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt.

C:\>echo J | cacls \\winsrv08R2-DC\Schueler_H$\tes.test /C /E /G Lehrer:F
Bearbeitetes Verzeichnis: \\winsrv08R2-DC\Schueler_H$\tes.test

C:\>echo J | cacls \\winsrv08R2-DC\Schueler_H$\tes.test /C /E /R Jeder
Bearbeitetes Verzeichnis: \\winsrv08R2-DC\Schueler_H$\tes.test

C:\>Pause
Drücken Sie eine beliebige Taste . . .

Das sieht nich so gut aus.


Und kann man das mit V2 am ende abschalten oder so umgehen das dann doch die Profildaten in den neuen erstellten ordner landen (am liebsten ohne die Richtlinien anzufassen)?
Member: bastla
bastla Apr 07, 2012 at 22:24:16 (UTC)
Goto Top
Hallo Bammboole!

Lass versuchsweise mal "domaene\" weg:
echo J | cacls \\winsrv08R2-DC\Schueler$\%1$ /C /E /G %1:F
(an
Es peilt zwar keiner das die es an ihr Domain anpassen müssen
wird's ja sicher nicht gelegen sein face-wink) ...
Und kann man das mit V2 am ende abschalten
Abschalten ist nicht, aber Du kannst ja den Pfad anpassen:
b.Put "profilePath", "\\winsrv08R2-DC\Schueler$\" & accountname & ".V2"
Grüße
bastla
Member: bastla
bastla Apr 07, 2012 at 23:57:11 (UTC)
Goto Top
Nachtrag (weil nochmal genauer drübergeschaut face-wink):

Wenn Du die Ordner jeweils mit "$" am Ende erstellen willst, musst Du das natürlich auch schon im VBScript so machen - daher wäre die Zeile richtig so zu schreiben:
b.Put "profilePath", "\\winsrv08R2-DC\Schueler$\" & accountname & "$.V2"
bzw auch
b.Put "homeDirectory", "\\winsrv08R2-DC\Schueler_H$\" & accountname  & "$"
Und nur der Ordnung halber: Für den Profilpfad muss dann natürlich auch im Batch ".V2" hinzugefügt werden, also:
md "\\winsrv08R2-DC\Schueler$\%1$.V2"  
echo J | cacls "\\winsrv08R2-DC\Schueler$\%1$.V2" /C /E /G Administratoren:F   
...
wobei sich für den Pfad eine Variable anböte:
set "ProfilePath=\\winsrv08R2-DC\Schueler$\%1$.V2"  
md "%ProfilePath%"  
echo J | cacls "%ProfilePath%" /C /E /G Administratoren:F   
...
Grüße
bastla
Member: Bammboole
Bammboole Apr 08, 2012 at 15:20:24 (UTC)
Goto Top
So... Danke an die, die wat geschrieben haben. Speziel an basla ;)

Funktioniert soweit alles.

@bastla: Was dieses V2 am ende angeht. Ich musste die Endung nur beim erstellen des Ordners angeben... sprich in "verz.cmd". Wenn ich noch in der vbs, für den Profilepath angebe, erstellt das system eiskalt einen neuen Ordner der dann bsp: "lehrer.V2.V2" heißt. Dreistes dingen.

Was mich allerdings noch irritiert... Liegt aber nicht am script (denke ich). Die Profilordner werden weiterhin auch auf dem TS angelegt, unter Benutzer. Zusätzlich zu demwas auf dem DC angelegt wird. Hmmm, ma schauen.

Greetz