joshuatree
Goto Top

VBS-Job läuft in OU aber nicht in Unter-OUs

Hallo,

ich habe mir ein Script gebastelt das mir an jeden User-Objekt etwas ändert.
Das Funktioniert auch allerdings nur in der OU in der ich das Script starte.
Ich hätte gerne das es auch wenn es eine Unter-OU findet die User darin bearbeitet wie kann ich das.

Dim OutPutFile,Username,newmailnickname,newmailnicknamepart1,newmailnicknamepart2

Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")  
Set OutPutFile = FileSystem.CreateTextFile(".\alias.csv", True)  
OutPutFile.WriteLine "Username;Alias"  

Set objRootDSE = GetObject("LDAP://rootDSE")  
Set objContainer = GetObject("LDAP://ou=blabla,dc=domain,DC=de")  

For Each obj In objContainer
    			  
      
               
    
    Username = obj.givenName & " " & obj.sn  
    newmailNickNamePart1 = Left(obj.givenName,2)
    newmailNickNamePart2 = Left(obj.sn,6)
    newmailnickname = newmailNickNamePart1 & newmailNickNamePart2
    WScript.Echo "Username:" & Username & vbCrlf & "newmailnickName: " & newmailnickname  
    outputFile.WriteLine UserName & ";" & newmailnickname  
    
    
    
    
    obj.Put "mailnickName", (newmailNickName)     
    obj.SetInfo                                          
    
		
Next

Gruss
Andreas

Content-ID: 114935

Url: https://administrator.de/forum/vbs-job-laeuft-in-ou-aber-nicht-in-unter-ous-114935.html

Ausgedruckt am: 23.12.2024 um 09:12 Uhr

bastla
bastla 29.04.2009, aktualisiert am 18.10.2012 um 18:38:05 Uhr
Goto Top
Hallo JoshuaTree!

Den Link zu an anderer Stelle schon einmal angeboten ...

Grüße
bastla
JoshuaTree
JoshuaTree 05.05.2009 um 11:09:50 Uhr
Goto Top
Hi Bastla,

vielen lieben Dank ich habs einfach nicht mehr gefunden und hatte insgeheim die Hoffnung das du das hier liest face-wink

Gruss
Andreas
JoshuaTree
JoshuaTree 05.05.2009 um 11:19:15 Uhr
Goto Top
Kann ich das mit meinem Provider zusammenfrickeln?
Ich benutze ja den rootdse und wir in unserem alten Script den ADODB ?

Oh man face-sad
bastla
bastla 05.05.2009 um 20:30:14 Uhr
Goto Top
Hallo JoshuaTree!

Du bekommst aus dem anderen Script ja ohnehin einen "ADSPath" - den kannst Du dann als Basis für Dein Script verwenden, also etwa:
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=blabla,dc=domain,DC=de' WHERE " & _  
        "objectCategory='organizationalUnit'"    
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    ADSPath = objRecordSet.Fields("ADsPath").Value  
    Set objContainer = GetObject(ADSPath)
    For Each obj In objContainer
        Username = obj.givenName & " " & obj.sn  
        ' ...  
    Next
    objRecordSet.MoveNext
Loop
Grüße
bastla
JoshuaTree
JoshuaTree 13.05.2009 um 17:22:20 Uhr
Goto Top
@bastla
Habe mir den Code umgebaut.
Wenn ich ihn mit wscript.echo durchlaufen lies war alles gut.
Jetzt wo ich die änderung machen wollte bleibt er stehen mit:
script.vbs(35, 5) (null): Die Attributsyntax, die dem Verzeichnisdienst übergeben wurde, ist ungültig.
Zeile 35 ist die obj.SetInfo vorher hat er 8 objekte sauber bearbeitet.
Kann es sein das das Script ein Problem damit hat wenn es auf ein Gruppenobjekt trifft?


Dim OutPutFile,Username,newmailnickname,newmailnicknamepart1,newmailnicknamepart2
Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")  
Set OutPutFile = FileSystem.CreateTextFile(".\alias.csv", True)  
OutPutFile.WriteLine "Username;Alias"  


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=administration,dc=blabla,DC=de' WHERE " & _  
        "objectCategory='organizationalUnit'"    
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    ADSPath = objRecordSet.Fields("ADsPath").Value  
    Set objContainer = GetObject(ADSPath)
    For Each obj In objContainer
        Username = obj.givenName & " " & obj.sn  
    	newmailNickNamePart1 = Left(obj.givenName,2)
    	newmailNickNamePart2 = Left(obj.sn,6)
    	newmailnickname = newmailNickNamePart1 & newmailNickNamePart2
    	'WScript.Echo "Username:" & Username & vbCrlf & "newmailnickName: " & newmailnickname  
    	
    obj.Put "mailnickName", (newmailNickName) 'Attribut in Zwischenspeicher schreiben  
    obj.SetInfo                               'Zwischenspeicher in Objekt übertragen  
    outputFile.WriteLine UserName & ";" & newmailnickname  
   
   
    Next
    objRecordSet.MoveNext
Loop
bastla
bastla 13.05.2009 um 17:43:02 Uhr
Goto Top
Hallo JoshuaTree!

Versuch es mit folgender zusätzlicher Zeile (zwischen 26 und 27):
objContainer.Filter = Array("user")
Grüße
bastla