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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 46416
Url: https://administrator.de/forum/profilpfad-per-script-zuweisen-46416.html
Ausgedruckt am: 23.12.2024 um 14:12 Uhr
30 Kommentare
Neuester Kommentar
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
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
... 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%"):
Grüße
bastla
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
bastla
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
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]
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."
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]
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:
Grüße
bastla
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
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
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
Prost Neujahr ........
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
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
Hallo JoshuaTree!
Für Homeverzeichnis: homeDrive (Laufwerksbuchstabe), homeDirectory (Pfad); für TS-Profil: TerminalServicesProfilePath (Beispiele dazu hier oder da)
Grüße
bastla
... 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 MuellerFür Homeverzeichnis: homeDrive (Laufwerksbuchstabe), homeDirectory (Pfad); für TS-Profil: TerminalServicesProfilePath (Beispiele dazu hier oder da)
Grüße
bastla
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
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
Hallo JoshuaTree!
Etwa so:
Übrigens: Zum Posten von Code hätten wir hier < code>-Tags (siehe Formatierungen in den Beiträgen) ...
Grüße
bastla
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
Hallo JoshuaTree!
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
Grüße
bastla
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
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?
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?