mactoolz
Goto Top

Profilpfad per Script zuweisen

Hallo,

kann man per Script oder egal was für ein Scriptformat den Profilpfad eines Benutzer zuweisen ???

Normalerweise würde man für jeden Benutzer in der OU den Profilpfad per Hand einmalig zuweisen, schöner wäre das ganze natürlich per Script ausführen zu lassen.


mfg


MacToolz

Content-ID: 46416

Url: https://administrator.de/forum/profilpfad-per-script-zuweisen-46416.html

Ausgedruckt am: 23.12.2024 um 14:12 Uhr

LUPUS1985
LUPUS1985 10.12.2006 um 14:18:14 Uhr
Goto Top
hmm geht auch anders

schreib einfach den pfad per variablen rein also glaube das war "server\user\group\%username"
und dann kpoierste die dat in den default user rein
damit wird jeder neu angelgter user auff dem server -> user ->group (je nachdem wie das bei dir heist) unter seinen profilnamen ein pfad angelgt bekommen...

genau kann ich dir das jetzt nicht sagen da müste ich auch erstmal wieder in meinen ordnern suchen
aber ich schau mal
LUPUS1985
LUPUS1985 10.12.2006 um 14:18:20 Uhr
Goto Top
doppelpost sorry
bastla
bastla 10.12.2006 um 14:48:18 Uhr
Goto Top
Hallo mactoolz!

Die Einstellungen für einen einzelnen User kannst Du mit folgendem VB-Script vornehmen. Um dies für alle User einer Gruppe durchzuführen, benötigst Du eine Schleife wie hier gezeigt, auf OU bezogen gäbe es zB das.

HTH
bastla
bastla
bastla 10.12.2006 um 15:39:19 Uhr
Goto Top
... oder um es etwas konkreter zu machen: Das folgende Script erstellt für alle User der OU "ADM" der Domäne "test.local" einen neuen "Profilpfad"-Eintrag "\\Server\ADMProfiles\Anmeldename" (analog zur Variable "%username%"):
Const strOU = "ou=ADM,dc=test,dc=local"  
Const strProfPath = "\\Server\ADMProfiles\"  

Set objOU = GetObject("LDAP://" & strOU)  
ObjOU.Filter = Array("user")  

For Each objOUUser in objOU
	Set objUser = GetObject _
	  ("LDAP://cn=" & objOUUser.cn & "," & strOU)  
	strSAMAccountName = objUser.Get("sAMAccountName")  
	objUser.Put "profilePath", strProfPath & strSAMAccountName  
	objUser.SetInfo
Next
Grüße
bastla
mactoolz
mactoolz 10.12.2006 um 16:29:24 Uhr
Goto Top
Hi,

ich habe versucht den Code umzusetzen. Leider reagiert er nicht darauf.
Jetzt weiß ich nicht ob der Ausgeführt wurde, zumindest sehe ich das er nicht für alle den PFad angelegt hat.

MAcht das denn überhaupt Sinn das bei jeder Anmeldung geprüft wird ob für einen USER der Profilpfad angelegt wurde ???

Wie kann ich denn Debuggen ???

Ist der eInsatz von diesem Code denn so richtig ??

Function Start()

Const strOU = "ou=ADM,dc=B111FST31-31.FST31g1.b111,dc=local"
Const strProfPath = "\\B111FST31-31.FST31g1.b111\Profilpfad\"

Set objOU = GetObject("LDAP:" & strOU)
ObjOU.Filter = Array("user")

For Each objOUUser in objOU
Set objUser = GetObject _
("LDAP:
cn=" & objOUUser.cn & "," & strOU)
strSAMAccountName = objUser.Get("sAMAccountName")
objUser.Put "profilePath", strProfPath & strSAMAccountName
objUser.SetInfo
Next

End Function

Das ganze habe ich als VBS gespeichert

MacToolz
bastla
bastla 10.12.2006 um 16:50:26 Uhr
Goto Top
Hallo mactoolz!

Das Script ist für den einmaligen Einsatz gedacht, um für alle Konten (einer OU) den Profilpfad zu ändern / einzutragen. Nach Anpassung der ersten beiden Zeilen an Deine Gegebenheiten so wie von mir gepostet (also ohne "Function" / "End Function") zB als "SetProfilePath.vbs" speichern und als Domänen-Admin ausführen.

Zum Testen wirst Du sinnvoller Weise eine OU mit nur 2 oder 3 Testusern verwenden. Zum Debuggen kannst Du zB
WScript.Echo "Profilpfad für " & objOUUser.cn & " (" & strSAMAccountName & ") eingetragen."  
vor dem "Next" einsetzen. Das Ergebnis ist bei den entsprechenden Usern im Register "Profil" abzulesen.

In diesem Register "Profil" kannst Du in Zukunft bei allen neuen Konten den Profilpfad direkt eintragen, zB etwa "\\B111FST31-31.FST31g1.b111\Profilpfad\%username%", wobei vom System für "%username%" der Benutzername des bearbeiteten Kontos verwendet wird. Weitere User erstellst Du dann als Kopie, wobei diese automatisch ihren Benutzernamen eingesetzt bekommen. Das Gleiche funktioniert auch mit dem Home-Directory ("Basisordner" - "Verbinden mit").

Grüße
bastla

[Edit] Anpassung der Const-Zeilen war für mich noch nicht ersichtlich [/Edit]
mactoolz
mactoolz 10.12.2006 um 16:59:19 Uhr
Goto Top
Hi,

irgendwie kapier ich das nicht wie VBS funktioniert. Ich kenn mich mit VBA ein wenig aus.

Ungefähr weis ich auch was dort passiert, nur bei mir kommt die Meldung mit
eine Referenzauswertung wurde vom Server zurückgesendet


Was bedeutet das ???

Sind diese beiden Zeilen richtig ???

Const strOU = "ou=Buchhaltung_Lokal,dc=B111FST31-31.FST31g1.b111,dc=local"
Const strProfPath = "\\B111FST31-31.FST31g1.b111\Profilpfad\"


Vorallem für ADM
bastla
bastla 10.12.2006 um 17:01:18 Uhr
Goto Top
Nachtrag:

Wenn Du die "Debug"-Zeile eingebaut hast, starte das Script von der Kommandozeile mit
cscript //nologo SetProfilePath.vbs
So kannst Du die "WScript.Echo"-Ausgaben mitlesen.

Grüße
bastla
bastla
bastla 10.12.2006 um 17:08:25 Uhr
Goto Top
Hallo mactoolz!

Wenn Du unter der Domäne "B111FST31-31.FST31g1.b111.local" eine OU "Buchhaltung_Lokal" hast und der Name Deines Servers ebenfalls "B111FST31-31.FST31g1.b111" lautet, sind Deine Const-Zeilen ok.

Das gesamte Script müsste dann also so aussehen:
'SetProfilePath.vbs  
Const strOU = "ou=Buchhaltung_Lokal,dc=B111FST31-31.FST31g1.b111,dc=local"  
Const strProfPath = "\\B111FST31-31.FST31g1.b111\Profilpfad\"  

Set objOU = GetObject("LDAP://" & strOU)  
ObjOU.Filter = Array("user")  

For Each objOUUser in objOU
    Set objUser = GetObject _
      ("LDAP://cn=" & objOUUser.cn & "," & strOU)  
    strSAMAccountName = objUser.Get("sAMAccountName")  
    objUser.Put "profilePath", strProfPath & strSAMAccountName  
    objUser.SetInfo
    WScript.Echo "Profilpfad für " & objOUUser.cn & " (" & strSAMAccountName & ") eingetragen."  
Next

Grüße
bastla
mactoolz
mactoolz 10.12.2006 um 17:08:32 Uhr
Goto Top
Hi,

bringt nichts, zumindest wird dann die Fehlermeldung im DOs Fenster angezeigt.


MacToolz
mactoolz
mactoolz 10.12.2006 um 17:17:05 Uhr
Goto Top
Hi,

ich muss ja den Computername der Domäne einsetzen richtig ???


MacToolz
bastla
bastla 10.12.2006 um 17:20:49 Uhr
Goto Top
Hallo mactoolz!

Für den Profilpfad ("strProfPath") brauchst Du den UNC-Pfad, also "\\RechnernameDesServers\Freigabename\", für die LDAP-Abfragen den Domänennamen.

bastla
mactoolz
mactoolz 10.12.2006 um 18:59:34 Uhr
Goto Top
Hi,

ok das habe ich ja auch wie du aus dem erstetzen Code sehen kannst.

Nur leider kann ich immer noch nichts mit der Fehlermeldung anfangen


MacToolz
bastla
bastla 10.12.2006 um 19:44:13 Uhr
Goto Top
Hallo mactoolz!

Also wenn ich ganz genau hinsehe möchte ich fast meinen, in Deinem Domänennamen 2 Punkte gesehen zu haben (in welchen Wald bin ich denn da geraten?) - dann:
Const strOU = "ou=Buchhaltung_Lokal,dc=B111FST31-31,dc=FST31g1,dc=b111,dc=local"  

Grüße
bastla
mactoolz
mactoolz 02.01.2007 um 11:33:24 Uhr
Goto Top
Hi,

als erstes frohes neues Jahr.

Ich wollte mich heute wieder mal daran geben.

Irgenwie verstehe ich das ganze nicht. Jetzt habe ich Probleme mit LDAP Anbindung.
Leider habe ich keine vernünftige Erklärung zu LDAP gefunden, zumindest wie sich LDAP zusammensetzt.

Der letzte Vorschlag lief wunderbar. Jetzt bekomme ich die Meldung aus Access das eine Referenzauslastung wurde vom Server zurückgesendet.

Was bedeutet das. ???

Zur Info. Ich habe den Domänencontroller geändert.

Das ist der Computername B111FST31-31.FST31B111.G1
Domäne FST31B111.G1


Danke im voraus


MacToolz
bastla
bastla 02.01.2007 um 11:45:17 Uhr
Goto Top
Hallo mactoolz!

Du schreibst, die Meldung käme dieses Mal aus Access?!

Darf ich einen neuen Thread vorschlagen (hier sind wir zwei beide mittlerweile ziemlich unter uns und eín paar Augen mehr können sicher nicht schaden), in dem Du die aktuelle Situation noch einmal zusammenfasst und das neue Problem schilderst?

Grüße
bastla
JoshuaTree
JoshuaTree 08.01.2008 um 11:54:45 Uhr
Goto Top
Prost Neujahr ........face-smile
Wie müßte denn das Scrip aussehen wenn ich es ganz oben ansetzen möchte, also sprich in einer OU die noch weitere Unter-OUs hat.
Da müßt doch eine Schleife erstellt werden damit er jede OU durchläuft.

Ich habe die OU > Niederlassungen > und dann die Städte (frankfurt, münchen hamburg....)
Die User sind natürlich entsprechend ihrem Standort in den OUs aufgeteilt.

So funktioniert das Script nur für User in der obersten OU.

achja und wie Komme ich an das Homeverzeichnis und das Terminalserverprofil ran wie heißt da die Variable aus dem AD
bastla
bastla 08.01.2008 um 13:33:30 Uhr
Goto Top
Hallo JoshuaTree!

... in einer OU die noch weitere Unter-OUs hat. Da müßt doch eine Schleife erstellt werden damit er jede OU durchläuft.
Siehe zB How Can I List All the Sub-OUs in an OU?

... Homeverzeichnis und das Terminalserverprofil ran wie heißt da die Variable aus dem AD
Listen gibt es zB bei Richard Mueller

Für Homeverzeichnis: homeDrive (Laufwerksbuchstabe), homeDirectory (Pfad); für TS-Profil: TerminalServicesProfilePath (Beispiele dazu hier oder da)

Grüße
bastla
JoshuaTree
JoshuaTree 08.01.2008 um 15:41:26 Uhr
Goto Top
Hi sieht gut aus jetzt habe ich aber eine neues Problem.

Wie bekomme ich die beiden routinen zusammen?
Ich habe diese die mir die User bearbeitet .
Const strOU = "ou=ADM,dc=test,dc=local"
Const strProfPath = "\\Server\ADMProfiles\"

Set objOU = GetObject("LDAP:" & strOU)
ObjOU.Filter = Array("user")

For Each objOUUser in objOU
Set objUser = GetObject _
("LDAP:
cn=" & objOUUser.cn & "," & strOU)
strSAMAccountName = objUser.Get("sAMAccountName")
objUser.Put "profilePath", strProfPath & strSAMAccountName
objUser.SetInfo
Next

und diese die mir die OUs auflistet wie bekomme ich den Wert von der zweiten routine die mir die OUs ausließt mit der ersten gekoppelt das die User in der ausgelesenen OU geändert werden.?


On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

objCommand.CommandText = _
"SELECT ADsPath FROM 'LDAP://ou=Testcenter,dc=AD,dc=Firma,dc=DE' WHERE " & _
"objectCategory='organizationalUnit'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo objRecordSet.Fields("ADsPath").Value
objRecordSet.MoveNext
Loop

Danke für die Hilfe
bastla
bastla 08.01.2008 um 16:45:09 Uhr
Goto Top
Hallo JoshuaTree!

Etwa so:
Const strProfPath = "\\Server\ADMProfiles\"  

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")  
Set objCommand = CreateObject("ADODB.Command")  
objConnection.Provider = "ADsDSOObject"  
objConnection.Open "Active Directory Provider"  
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000  
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  

objCommand.CommandText = _
"SELECT ADsPath FROM 'LDAP://ou=Testcenter,dc=AD,dc=ANZAG,dc=DE' WHERE " & _  
"objectCategory='organizationalUnit'"  
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
	ProcessOU objRecordSet.Fields("ADsPath").Value  
	objRecordSet.MoveNext
Loop

WScript.Echo "Fertig."  
' ##### Ende Hauptprogramm #####  


Sub ProcessOU(strOU)

Set objOU = GetObject(strOU)
ObjOU.Filter = Array("user")  

For Each objOUUser in objOU
	Set objUser = GetObject _
		("LDAP://cn=" & objOUUser.cn & "," & strOU)  
	strSAMAccountName = objUser.Get("sAMAccountName")  
	objUser.Put "profilePath", strProfPath & strSAMAccountName  
	objUser.SetInfo
Next

End Sub

Übrigens: Zum Posten von Code hätten wir hier < code>-Tags (siehe Formatierungen in den Beiträgen) ...

Grüße
bastla
JoshuaTree
JoshuaTree 09.01.2008 um 08:53:05 Uhr
Goto Top
Vielen Dank,

Ich erhalte aber einen Fehler in Zeile 35 Zeichen 2
Fehler:0x80005000
Code:80005000
Quelle: Null

was könnte das sein?
JoshuaTree
JoshuaTree 09.01.2008 um 14:00:13 Uhr
Goto Top
Vielleicht liege ich ja auch falsch aber wo wird die OU an das Unterprogramm übergeben.
Ich kann da keine Schnittstelle sehen.

Ich würde sowas wie: "hüpfe für jede OU ins Unterprogramm (Sub ProcessOU(strOU))"

Oder übersehe ich da was.

Danke für die Hilfe
bastla
bastla 09.01.2008 um 14:09:36 Uhr
Goto Top
Hallo JoshuaTree!

Oder übersehe ich da was.
Ja - die Zeile "ProcessOU objRecordSet.Fields("ADsPath").Value".

Viel schlimmer ist allerdings, was ich übersehen habe: Das Ergebnis der Abfrage liefert vollständige LDAP-Pfade zurück, allerdings wird in Zeile 36 (= Fortsetzung der Zeile 35) in der Variable "strOU" der Pfad ohne führendes "LDAP://" benötigt.

Ändere daher versuchsweise diese Zeile auf
("LDAP://cn=" & objOUUser.cn & "," & Mid(strOU,8))  

Grüße
bastla
JoshuaTree
JoshuaTree 09.01.2008 um 14:35:01 Uhr
Goto Top
Hey cool, lllllaaaaaoooolllllaaaa

geht blöde frage wofür die 8.

Gruss


Danke für die Hilfe
bastla
bastla 09.01.2008 um 14:49:01 Uhr
Goto Top
Hallo JoshuaTree!

... wofür die 8.
Benötigt wird der Teil nach "LDAP://", also ab Position 8 des Strings:
LDAP://ou=...
       ^
123456789

Grüße
bastla
JoshuaTree
JoshuaTree 16.01.2008 um 13:07:18 Uhr
Goto Top
Funktioniert sauber,

jetzt wollt ich das ganze in Richtung TerminalServerProfil umbiegen und habe ProfilePath mit CtxWFProfilePath umgeändert also so

Const strProfPath = "\\Server\TSProfiles\"

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

objCommand.CommandText = _
"SELECT ADsPath FROM 'LDAP:ou=Test,ou=Testcenter,dc=AD,dc=ANZAG,dc=DE' WHERE " & _
"objectCategory='organizationalUnit'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
ProcessOU objRecordSet.Fields("ADsPath").Value
objRecordSet.MoveNext
Loop

WScript.Echo "Fertig."
' ##### Ende Hauptprogramm #####


Sub ProcessOU(strOU)

Set objOU = GetObject(strOU)
ObjOU.Filter = Array("user")

For Each objOUUser in objOU
Set objUser = GetObject _
("LDAP:
cn=" & objOUUser.cn & "," & Mid(strOU,8))
strSAMAccountName = objUser.Get("sAMAccountName")
objUser.Put "CtxWFProfilePath", strProfPath & strSAMAccountName
objUser.SetInfo
Next

End Sub

Da bricht er ab mit der Meldung "Das angegebene Verzeichnisattribut existiert bereits" in Zeile 44.
Klar existiert es ich will es ja ändern ...hmmmm?`

Was könnte das sein stimmt der Attributnamen etwa nicht?
bastla
bastla 16.01.2008 um 14:11:46 Uhr
Goto Top
Hallo JoshuaTree!

... stimmt der Attributnamen etwa nicht?
Weiß ich leider nicht - außer dem oben schon erwähnten "TerminalServicesProfilePath" fällt mir nix mehr ein ...

Grüße
bastla
JoshuaTree
JoshuaTree 17.01.2008 um 09:09:07 Uhr
Goto Top
Hallo,

habe jetzt rausbekommen das es nicht geht über ADSI an die Einstellung für "TerminalServicesProfilePath" zu kommen. Würde erst ab 2003 gehen.
Kennt jemand eine alternative?
bastla
bastla 17.01.2008 um 11:11:12 Uhr
Goto Top
Hallo JoshuaTree!

Vielleicht wäre es genau jetzt Zeit für einen neuen Thread, in welchem Du das Problem unter Nennung einiger Details (gelegentlich spielt ja sogar die OS-Version eine Rolle face-wink) einem größeren Kreis präsentieren kannst; hier sind wir vermutlich ziemlich unter uns ...

Grüße
bastla
keksprinz
keksprinz 19.02.2008 um 09:37:55 Uhr
Goto Top
unter windows 2003 SP1 Domain Controller gehts auch nicht face-sad

Jemand noch ne Idee ?

Das angegebene Verzeichnisdienstattribut bzw. der angegebene Verzeichnisdienstwert ist bereits vorhanden.