14634

Script für Exchange damit User nicht im Adressbuch erscheinen

Hallo,

ich will am Exchange (2003) bei einigen Usern das Häkchen "nicht in Exchange Adresslisten anzeigen" setzten. Ich würde das gerne über ein Script machen da ich es bei ca. 80 Usern machen muss.

Hat hier evtl. jemand ein fertig Script zur Hand?

Vielen Dank für euer hilfe
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 217721

Url: https://administrator.de/forum/script-fuer-exchange-damit-user-nicht-im-adressbuch-erscheinen-217721.html

Ausgedruckt am: 11.05.2025 um 06:05 Uhr

colinardo
colinardo 24.09.2013 aktualisiert um 11:10:26 Uhr
Goto Top
Hallo GI05e,
für den Server 2003 sollte folgendes VBS-Script funktionieren: (in Zeile 1 noch den Namen des Containers (DN) angeben indem sich die User befinden)

StartNode = "OU=SBSUsers,OU=Users,ou=MyBusiness,dc=domain,dc=local"  

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

FilterString = "(&(objectCategory=person)(objectClass=user)" _  
        & "(proxyAddresses=*)" _  
        & "(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"  

Attributes = "adspath"  
LDAPQuery = "<LDAP://" & StartNode & ">;" & FilterString & ";" _  
        & Attributes & ";" & SearchScope  

objCommand.CommandText = LDAPQuery
objCommand.Properties("Page Size") = 1000  
objCommand.Properties("Timeout") = 30  
objCommand.Properties("Cache Results") = False  

Set objRecordSet = objCommand.Execute

If not objRecordSet.eof then 
   objRecordSet.MoveFirst

   Do Until objRecordSet.EOF
      strUserPath = objRecordSet.Fields("ADsPath").Value  
      Set objUser = GetObject(strUserPath)
      objUser.MSExchHideFromAddressLists = True
      objUser.SetInfo
      objRecordSet.MoveNext
   Loop
End If

objRecordset.Close
objConnection.Close
wscript.echo "Fertig"  
Grüße Uwe
14634
14634 27.09.2013 um 10:57:00 Uhr
Goto Top
Hallo,


wow danke, hier werden nur die User angefasst die deaktiviert sind oder?
colinardo
colinardo 27.09.2013 aktualisiert um 11:02:46 Uhr
Goto Top
Zitat von @14634:
wow danke, hier werden nur die User angefasst die deaktiviert sind oder?
egal ob das Häkchen drin ist oder nicht es wird bei allen Usern die du angibst nochmals gesetzt. Wenn du das nicht willst kann man es leicht erweitern das es abfragt ob das Häkchen schon gesetzt ist(Zeile 31-35 if-Abfrage):
StartNode = "OU=SBSUsers,OU=Users,ou=MyBusiness,dc=domain,dc=local"  

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

FilterString = "(&(objectCategory=person)(objectClass=user)" _  
        & "(proxyAddresses=*)" _  
        & "(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"  

Attributes = "adspath"  
LDAPQuery = "<LDAP://" & StartNode & ">;" & FilterString & ";" _  
        & Attributes & ";" & SearchScope  

objCommand.CommandText = LDAPQuery
objCommand.Properties("Page Size") = 1000  
objCommand.Properties("Timeout") = 30  
objCommand.Properties("Cache Results") = False  

Set objRecordSet = objCommand.Execute

If not objRecordSet.eof then 
   objRecordSet.MoveFirst

   Do Until objRecordSet.EOF
      strUserPath = objRecordSet.Fields("ADsPath").Value  
      Set objUser = GetObject(strUserPath)
      If objUser.MSExchHideFromAddressLists = False then
         objUser.MSExchHideFromAddressLists = True
         objUser.SetInfo
         objRecordSet.MoveNext
      End if
   Loop
End If

objRecordset.Close
objConnection.Close
wscript.echo "Fertig"  

Grüße Uwe
14634
14634 27.09.2013 um 11:50:29 Uhr
Goto Top
hey, das ist mein problem, wir haben aktive und deaktiviere User in der gleichen OU drin, über das Script soll aber nur bei den deaktivierten Usern der
Haken gesetzt werden.
colinardo
colinardo 27.09.2013 aktualisiert um 11:59:42 Uhr
Goto Top
Ach so, da hatten wir uns missverstanden. Das ist kein Problem. Dafür musst du nur die Zeile 12 des Codes so ändern:
& "(userAccountControl:1.2.840.113556.1.4.803:=2))"   
quasi nur das Ausrufezeichen(negation) und zwei Klammern weg machen.

Grüße Uwe
14634
14634 27.09.2013 um 12:03:00 Uhr
Goto Top
VIelen DAnk, werde es gleich ausprobieren
14634
14634 27.09.2013 um 12:08:20 Uhr
Goto Top
hi, Hi, bei mir kommt leider folgende fehlermeldung:

Zeile 23
Zeichen 1
Der übermittelte Verzeichnispfad ist ungültig
Code 80040E37
Quelle: Acrive Directory
colinardo
colinardo 27.09.2013 aktualisiert um 12:12:15 Uhr
Goto Top
Dann hast du nicht wie erwähnt in Zeile 1 des Scripts den Distinguished Name worin deine User liegen an deine Umgebung korrekt angepasst ...
14634
14634 27.09.2013 aktualisiert um 12:36:23 Uhr
Goto Top
HI, habe es so geändert:

StartNode = "ou=Migration_Appsense_XP,ou="Benutzer und Computer (Win7)",dc=xxxx,dc=org"

alles was unter Migration_Appsense_XP ist, will ich nehmen, muss ich da noch cn=*.* hinterlegen?
colinardo
colinardo 27.09.2013 aktualisiert um 12:37:39 Uhr
Goto Top
Zitat von @14634:
StartNode = ",ou=Migration_Appsense_XP,ou="Benutzer und Computer (Win7)",dc=xxxx,dc=org"
alles was unter Migration_Appsense_XP ist, will ich nehmen, muss ich da noch cn=*.* hinterlegen?
war fast richtig, (das Komma am Anfang, und die Anführungszeichen um die eine OU müssen noch weg.)
So sollte es gehen
StartNode = "ou=Migration_Appsense_XP,ou=Benutzer und Computer (Win7),dc=xxxx,dc=org"
Er nimmt dann alle Objekte innerhalb der OU Migration_Appsense_XP
14634
14634 27.09.2013 aktualisiert um 12:40:53 Uhr
Goto Top
hi,

hmmm dann kommt folgender Fehler:

Zeile: 23
Fehler: Die Tabelle ist nicht vorhanden
Code: 80040e37


spielt es ne rolle das der Exchange ein 2003 ist und die Domäne eine 2008 R2?
colinardo
colinardo 27.09.2013 um 12:43:43 Uhr
Goto Top
Zitat von @14634:
spielt es ne rolle das der Exchange ein 2003 ist und die Domäne eine 2008 R2?
Und ob das eine Rolle spielt !!!!!!!!!!!!!!!!!!!!!!
Das Script ist wie gesagt nur auf einem Server 2003 lauffähig ...
Krame gerade noch ein anderes raus...please wait
14634
14634 27.09.2013 um 12:44:18 Uhr
Goto Top
ich glaube ich habe den Fehler gefunden face-sad habe eine ou zu viel.

man man
14634
14634 27.09.2013 aktualisiert um 12:46:15 Uhr
Goto Top
also das Script sagt mir "Fertig, wenn ich aber auf den deaktivierten User schaue, dann ist leider kein Haken drin.

edit: das Script führe ich ja auf dem 2003 Exchange Server aus.
colinardo
colinardo 27.09.2013 aktualisiert um 13:20:26 Uhr
Goto Top
Was für Betriebssystemversion hast du denn jetzt endgültig ?? Exchange Server 2003 ist nicht das Betriebssystem des Servers !!!
Wenn es ein Server 2008 R2 ist dann habe ich noch ein Powershell-Script für einen EX2003:
(hier auch in Zeile ein dein DN deiner User angeben)
$OU = "cn=Users,dc=domain,dc=local"  
$objSearch = New-Object System.DirectoryServices.DirectorySearcher 
$objSearch.PageSize = 15000 
$objSearch.Filter = "(&(objectCategory=User)(objectCategory=Person)(userAccountControl:1.2.840.113556.1.4.803:=2))"  
$objSearch.SearchRoot = "LDAP://$OU"   
$allUsers = $objSearch.FindAll() 
foreach ($user in $allUsers) { 
	$o = $user.GetDirectoryEntry()
	$o.MSExchHideFromAddressLists = $true
	$o.CommitChanges()
}

Richtig angewendet funktionieren beide Scripte, ansonsten machst du grundlegend was falsch...

Grüße Uwe
colinardo
colinardo 27.09.2013 aktualisiert um 13:21:38 Uhr
Goto Top
WICHTIG, nachdem du die Scripte ausgeführt hast musst du die Anzeige in der MMC aktualisieren bzw. die Objekte neu laden, sonst haben diese noch die alten Infos in den Eigenschaften !!
14634
14634 27.09.2013 um 14:08:06 Uhr
Goto Top
Hi, es ist ein MS 2003 R2 Server.
colinardo
colinardo 27.09.2013 aktualisiert um 14:20:07 Uhr
Goto Top
Dann lösch mal die Zeilen 31 und 35 des Codes
also anstatt
 If objUser.MSExchHideFromAddressLists = False then
         objUser.MSExchHideFromAddressLists = True
         objUser.SetInfo
         objRecordSet.MoveNext
End if
sollte es danach so aussehen:
         objUser.MSExchHideFromAddressLists = True
         objUser.SetInfo
         objRecordSet.MoveNext
könnte sein das das Attribut der User noch nicht im AD gesetzt sind.
und danach bitte ein Refresh deiner MMC
14634
14634 30.09.2013 aktualisiert um 16:31:58 Uhr
Goto Top
hi, vielen Dank für deine Hilfe,

das Script schaut jetzt wie folgt aus:

StartNode = "ou=Migration_Appsense_XP,dc=xxxx,dc=org"

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

FilterString = "(&(objectCategory=person)(objectClass=user)" _
& "(proxyAddresses=*)" _
& "(userAccountControl:1.2.840.113556.1.4.803:=2))"

Attributes = "adspath"
LDAPQuery = "<LDAP://" & StartNode & ">;" & FilterString & ";" _
& Attributes & ";" & SearchScope

objCommand.CommandText = LDAPQuery
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False

Set objRecordSet = objCommand.Execute

If not objRecordSet.eof then
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
strUserPath = objRecordSet.Fields("ADsPath").Value
Set objUser = GetObject(strUserPath)
objUser.MSExchHideFromAddressLists = True
objUser.SetInfo
objRecordSet.MoveNext
Loop
End If

objRecordset.Close
objConnection.Close
wscript.echo "Fertig"


er läuft ohne Fehler durch, leider erstellt er den Haken nicht face-confused
Refresh der MMChabe ich gemacht
colinardo
colinardo 30.09.2013 um 17:59:07 Uhr
Goto Top
hier läuft das alles problemlos... was du noch probieren könntest wäre diese Zeile
FilterString = "(&(objectCategory=person)(objectClass=user)" _
& "(proxyAddresses=*)" _
& "(userAccountControl:1.2.840.113556.1.4.803:=2))" 
durch diese zu ersetzen
FilterString = "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))"
und führe das Script mal direkt auf dem DC aus, wie gesagt hier geht es auf einem Server 2003 R2 und auf einem Server 2008 R2 ohne Probleme, es muss also bei Dir etwas nicht stimmen...

Grüße Uwe
14634
14634 01.10.2013 um 09:32:05 Uhr
Goto Top
Hi,

super, vielen Dank es hat geklappt