14634
Goto Top

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

Content-Key: 217721

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

Printed on: April 26, 2024 at 04:04 o'clock

Member: colinardo
colinardo Sep 24, 2013 updated at 09:10:26 (UTC)
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
Mitglied: 14634
14634 Sep 27, 2013 at 08:57:00 (UTC)
Goto Top
Hallo,


wow danke, hier werden nur die User angefasst die deaktiviert sind oder?
Member: colinardo
colinardo Sep 27, 2013 updated at 09:02:46 (UTC)
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
Mitglied: 14634
14634 Sep 27, 2013 at 09:50:29 (UTC)
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.
Member: colinardo
colinardo Sep 27, 2013 updated at 09:59:42 (UTC)
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
Mitglied: 14634
14634 Sep 27, 2013 at 10:03:00 (UTC)
Goto Top
VIelen DAnk, werde es gleich ausprobieren
Mitglied: 14634
14634 Sep 27, 2013 at 10:08:20 (UTC)
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
Member: colinardo
colinardo Sep 27, 2013 updated at 10:12:15 (UTC)
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 ...
Mitglied: 14634
14634 Sep 27, 2013 updated at 10:36:23 (UTC)
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?
Member: colinardo
colinardo Sep 27, 2013 updated at 10:37:39 (UTC)
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
Mitglied: 14634
14634 Sep 27, 2013 updated at 10:40:53 (UTC)
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?
Member: colinardo
colinardo Sep 27, 2013 at 10:43:43 (UTC)
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
Mitglied: 14634
14634 Sep 27, 2013 at 10:44:18 (UTC)
Goto Top
ich glaube ich habe den Fehler gefunden face-sad habe eine ou zu viel.

man man
Mitglied: 14634
14634 Sep 27, 2013 updated at 10:46:15 (UTC)
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.
Member: colinardo
colinardo Sep 27, 2013 updated at 11:20:26 (UTC)
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
Member: colinardo
colinardo Sep 27, 2013 updated at 11:21:38 (UTC)
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 !!
Mitglied: 14634
14634 Sep 27, 2013 at 12:08:06 (UTC)
Goto Top
Hi, es ist ein MS 2003 R2 Server.
Member: colinardo
colinardo Sep 27, 2013 updated at 12:20:07 (UTC)
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
Mitglied: 14634
14634 Sep 30, 2013 updated at 14:31:58 (UTC)
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
Member: colinardo
colinardo Sep 30, 2013 at 15:59:07 (UTC)
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
Mitglied: 14634
14634 Oct 01, 2013 at 07:32:05 (UTC)
Goto Top
Hi,

super, vielen Dank es hat geklappt