hissickness
Goto Top

Im AD (w2k3) mehrere User unter Berücksichtigung der Namen ändern

Hallo Leute!

Ich würde gerne bei vielen User-Profilen den Eintrag "Connect" wegen eines Serverwechsels ändern, wobei die User sich dabei mit einem Ordner (Netzlaufwerk) verbinden der wie folgt ausschaut: "....\Nachname Vorname"
Die Platzhalter die - soviel ich weiß - im AD dafür stehen (LastName, Firstname) funktionieren scheinbar in dieser Hinsicht nicht wie zb. "...\%UserName%" das dann den Usernamen da hineinschreibt.
Für mich wäre es auch ok im Profil den eintrag "Connect" bei allen zu löschen und via eines Anmeldescripts mit den Ordnern zu verbinden. Habe das auch schon versucht nur auch da habe ich es nicht geschafft dass er das LastName FirstName annimmt.
Kenne mich diesbezüglich leider nicht sehr gut aus, würde mich also sehr über Ratschläge freuen...
Danke schon mal im Vorhinein!

Grüße!
HisSickness

Content-ID: 68790

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

Ausgedruckt am: 26.11.2024 um 05:11 Uhr

Logan000
Logan000 17.09.2007 um 12:57:59 Uhr
Goto Top
Das solte Dir weiterhelfen:

Domain= "MyDomain"  
DomSuffix= "de"  
strUserName = ""  
strFirstname= ""  
strLastname =""  

Set WshNetwork = Wscript.CreateObject("Wscript.Network")  
strUserName = LCase(WshNetwork.Username)

'WScript.Echo strUserName  

Set objConnection = CreateObject("ADODB.Connection")  
objConnection.Open "Provider=ADsDSOObject;"  
 
Set objCommand = CreateObject("ADODB.Command")  
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
    "<LDAP://dc=" & Domain & ",dc=" & DomSuffix & ">;(&(objectCategory=User)" & _  
         "(samAccountName=" & strUserName & "));samAccountName,givenName,sn;subtree"  
  
Set objRecordSet = objCommand.Execute
If objRecordset.RecordCount = 0 Then
    WScript.Echo "sAMAccountName: " & strUserName & " does not exist."  
Else
    'WScript.Echo strUserName & " exists."  
	'WScript.Echo objRecordset.fields.count  
	'WScript.Echo objRecordset.fields(1).value  
	strFirstname = objRecordset.fields(1).value
	'WScript.Echo objRecordset.fields(2).value  
	strLastname = objRecordset.fields(2).value
End If
objConnection.Close

WScript.Echo  strFirstname & " " &  strLastname  
HisSickness
HisSickness 18.09.2007 um 14:22:58 Uhr
Goto Top
Hallo Logan,

danke für die Hilfe das funktioniert sehr gut..

Ich habe da jetzt versucht ein Script anzuhängen das das alte Netzlaufwerk trennt und dann das neue verbindet.
Wenn ich nicht versuche das Alte zu trennen, dann führt er das Script korrekt aus sofern nicht noch eines mit dem Buchstaben existiert. Wenn ich aber versuche zu trennen und es existiert keines dann bekomme ich eine Fehlermeldung und das Skript stoppt.

Domain= "meine domain"  
DomSuffix= "at"  
strUserName = ""  
strFirstname= ""  
strLastname =""  

Set WshNetwork = Wscript.CreateObject("Wscript.Network")  
strUserName = LCase(WshNetwork.Username)

'WScript.Echo strUserName  

Set objConnection = CreateObject("ADODB.Connection")  
objConnection.Open "Provider=ADsDSOObject;"  
 
Set objCommand = CreateObject("ADODB.Command")  
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
    "<LDAP://dc=" & Domain & ",dc=" & DomSuffix & ">;(&(objectCategory=User)" & _  
         "(samAccountName=" & strUserName & "));samAccountName,givenName,sn;subtree"  
  
Set objRecordSet = objCommand.Execute
If objRecordset.RecordCount = 0 Then
    WScript.Echo "sAMAccountName: " & strUserName & " does not exist."  
Else
    'WScript.Echo strUserName & " exists."  
	'WScript.Echo objRecordset.fields.count  
	'WScript.Echo objRecordset.fields(1).value  
	strFirstname = objRecordset.fields(1).value
	'WScript.Echo objRecordset.fields(2).value  
	strLastname = objRecordset.fields(2).value
End If
objConnection.Close

WScript.Echo  strFirstname & " " &  strLastname  

strFileSRV = "meinserver"  
Set WshNetwork = Wscript.CreateObject("Wscript.Network")  
Set objShell = CreateObject("Shell.Application")  
------hier will ich trennen und habe 2 möglichkeiten versucht die ich weiter unten poste..-------
WshNetwork.MapNetworkDrive "X:", "\\" & strFileSRV & "\jugendliche\Delta\" & strLastname & " " & strFirstname  

Erster Trennversuch:
WshNetwork.RemoveNetworkDrive "X:"  
Dabei schreibt er mir einfach dass das Laufwerk nicht existiert..(wobei er natürlich recht hat, aber ich will dass er das ignoriert falls keines besteht und einfach fortfährt anstatt abzubrechen)

Alternativer Trennversuch:
Set WshShell = WScript.CreateObject("WScript.Shell")  
Return = WshShell.Run("net use X: /d /y", 0, True)  
Set WshShell = Nothing 
Dieser funktioniert wenn ich das Script lokal ausführe, aber als Logon-Script schreibt er mir folgende Fehlermeldung und bricht auch ab:
zeile: 41
zeichen: 1
fehler: 0x8007FFFF
code: 8007FFFF
quelle: (null)


Desweiteren wollte ich dieses Netzlaufwerk noch umbenennen mit folgendem Code am Schluss:
objShell.NameSpace("P:").Self.Name = "Jugendliche"  
Dabei bekomme ich folgende Fehlermeldung:
Fehler: Objekt erforderlich: 'objShell.NameSpace(...)'
Code: 800A01A8
Quelle: Laufzeitfehler in Microsoft VBScript


Wie sicher unschwer zu erkennen habe ich absolut keine Ahnung von VBS und habe einfach versucht fremde Codes zusammen zu schnippseln. Ist fast gelungen, aber leider nur fast deswegen bitte ich nochmal um Hilfe ;)

Danke!
HisSickness
Logan000
Logan000 18.09.2007 um 15:18:59 Uhr
Goto Top
Dabei schreibt er mir einfach dass das Laufwerk nicht existiert..(wobei er
natürlich recht hat, aber ich will dass er das ignoriert falls keines besteht und
einfach fortfährt anstatt abzubrechen)

Setze ein
on error resume next 
davor.

Solte es nicht heißen:
WshNetwork.NameSpace("P:").Self.Name = "Jugendliche"  
HisSickness
HisSickness 20.09.2007 um 15:00:28 Uhr
Goto Top
Funktioniert soweit gut danke!
Nur das mit dem umbenennen noch nicht..
Solte es nicht heißen:
> WshNetwork.NameSpace("P:").Self.Name  
> = "Jugendliche"  

scheinbar nicht.. hier schreibt er:

Fehler: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.: 'WshNetwork.NameSpace'
Logan000
Logan000 21.09.2007 um 08:37:14 Uhr
Goto Top
Stimmt mein Fehler. So wäre es richtig.
Set objShell = CreateObject("Shell.Application")  
objShell.NameSpace("X:").Self.Name = "NeuerName"