tschini
Goto Top

VBScript, Active Directory User Properties auslesen

Ich muss mit VBS einige Optionen von Benutzern auslesen. Die einzelnen Attribute (z.B. AccountDisabled, givenname etc.) such ich mir mit dem ADSI Edit Raus.

Die meisten Attribute funktionieren. Mit dem Attribut proxyAddresses bekommt man die E-Mail Adresse sowie deren Aliases zurück. Jedoch haben eineige Account's kein E-Mail Adresse was zu einem Error führt. Deshalb will die zuerst mit einer "IF" Abfrage abfragen, ob überhaupt etwas vorhanden ist. Wenn nichts gesetzt ist, steht im ADSI Edit "<Not Set>". Wie kann ich abfragen ob dem so ist, hab schon null, emptyornull, "" etc. versucht, jedoch kommt bei diesen immer "Type mismatch". Kann mit jemand dabei Helfen?

Content-Key: 84350

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

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

Member: TuXHunt3R
TuXHunt3R Apr 01, 2008 at 11:06:01 (UTC)
Goto Top
Poste doch mal deinen Code, dann sehen wir weiter.
Member: tschini
tschini Apr 02, 2008 at 08:09:12 (UTC)
Goto Top
OPTION EXPLICIT

Dim objDSE
Dim strAdPfad
Dim objWF
Dim objFile
Dim objLdapConnection
Dim objAdObject
Dim strsollname
Dim intgesamt
Dim intneu
Dim strAdresses
Dim strPEMail
Dim strNewName

intgesamt = 0
intneu = 0

Set objDSE = GetObject("LDAP://rootDSE")  
Set objWF = CreateObject("Scripting.FileSystemObject")  

Set objFile = objWF.CreateTextFile("C:/Documents and Settings/User/Desktop/Change Display Name/Test.txt", True)  

strAdPfad = "ou=Users," & objDSE.Get("defaultNamingContext")  

Set objLdapConnection = GetObject("LDAP://" & strAdPfad)  

For Each objAdObject In objLdapConnection
	Select Case objAdObject.Class
	Case "user"  
		If objAdObject.AccountDisabled = FALSE Then
			strPEMail = ""  
			On error Resume Next
			For Each strAdresses In objAdObject.proxyAddresses
				If instr(1,strAdresses,"SMTP") Then  
					strPEMail = Replace(strAdresses,"SMTP:","")  
				End If
			Next
			strsollname = objAdObject.sn & " " & objAdObject.givenname & " (" & strPEMail & ")"   
			intgesamt = intgesamt + 1
			If objAdObject.displayname = strsollname Then
				WScript.echo objAdObject.samaccountname & " in Ordnung"  
			Else
				WScript.echo objAdObject.samaccountname & " geändert"  
				If strPEMail = "" Then  
					strNewName = objAdObject.sn & " " & objAdObject.givenname  
				Else
					strNewName = objAdObject.sn & " " & objAdObject.givenname & " (" & strPEMail & ") "  
				End If
				objFile.WriteLine objAdObject.samaccountname & vbTab & objAdObject.displayname & vbTab & strNewName
				objAdObject.displayname = strNewName
				objAdObject.setinfo
				intneu = intneu + 1
			End If
		End If
	End Select
Next
objFile.Close
Set objWF = Nothing
WScript.echo "Neu geschrieben: " & intneu & " Gesamt: " & intgesamt  

Ich umgehe das Problem jetzt mit "On error Resume Next", jedoch ignoriert dies einfach den Error. Funkioniert, ist jedoch nicht ganz sauber. Deshalb wüsst ich gerne den return Typ von "objAdObject.proxyAddresses" damit ich mit einer IF Abfrage abfragen kann, ob diese nichts enthält.
Member: TuXHunt3R
TuXHunt3R Apr 02, 2008 at 18:39:33 (UTC)
Goto Top
Fass den Code in Codeformatierungsblöcke.

Hier steht wies geht:
Formatting instructions in the posts

Mit "Editieren" kannst du einen Beitrag nachträglich ändern
Member: lifeadmin
lifeadmin Apr 28, 2008 at 08:52:26 (UTC)
Goto Top
Versuchs mal den Fehler mit folgendem abzufangen:

try {

}

catch (ex as exception) {

console.writline (ex.tostring)

}
Member: n4426
n4426 Jun 22, 2011 at 20:28:51 (UTC)
Goto Top
Hi tschini,

da die Frage ja als gelöst makiert ist, wollte ich mal fragen, wie du das Problem jetzt gelöst hast? Hab das gleiche Problem (nur mit einem andern Attributt).

mfg
n4426