Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Script für Exchange damit User nicht im Adressbuch erscheinen

Frage Entwicklung Batch & Shell

Mitglied: Gl05e

Gl05e (Level 1) - Jetzt verbinden

24.09.2013 um 10:19 Uhr, 1615 Aufrufe, 21 Kommentare, 1 Danke

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
Mitglied: colinardo
24.09.2013, aktualisiert um 11:10 Uhr
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)

01.
StartNode = "OU=SBSUsers,OU=Users,ou=MyBusiness,dc=domain,dc=local" 
02.
 
03.
Set objCommand = CreateObject("ADODB.Command") 
04.
Set objConnection = CreateObject("ADODB.Connection") 
05.
objConnection.Provider = "ADsDSOObject" 
06.
objConnection.Open "Active Directory Provider" 
07.
objCommand.ActiveConnection = objConnection 
08.
SearchScope = "subtree" 
09.
 
10.
FilterString = "(&(objectCategory=person)(objectClass=user)" _ 
11.
        & "(proxyAddresses=*)" _ 
12.
        & "(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" 
13.
 
14.
Attributes = "adspath" 
15.
LDAPQuery = "<LDAP://" & StartNode & ">;" & FilterString & ";" _ 
16.
        & Attributes & ";" & SearchScope 
17.
 
18.
objCommand.CommandText = LDAPQuery 
19.
objCommand.Properties("Page Size") = 1000 
20.
objCommand.Properties("Timeout") = 30 
21.
objCommand.Properties("Cache Results") = False 
22.
 
23.
Set objRecordSet = objCommand.Execute 
24.
 
25.
If not objRecordSet.eof then  
26.
   objRecordSet.MoveFirst 
27.
 
28.
   Do Until objRecordSet.EOF 
29.
      strUserPath = objRecordSet.Fields("ADsPath").Value 
30.
      Set objUser = GetObject(strUserPath) 
31.
      objUser.MSExchHideFromAddressLists = True 
32.
      objUser.SetInfo 
33.
      objRecordSet.MoveNext 
34.
   Loop 
35.
End If 
36.
 
37.
objRecordset.Close 
38.
objConnection.Close 
39.
wscript.echo "Fertig"
Grüße Uwe
Bitte warten ..
Mitglied: Gl05e
27.09.2013 um 10:57 Uhr
Hallo,


wow danke, hier werden nur die User angefasst die deaktiviert sind oder?
Bitte warten ..
Mitglied: colinardo
27.09.2013, aktualisiert um 11:02 Uhr
Zitat von Gl05e:
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):
01.
StartNode = "OU=SBSUsers,OU=Users,ou=MyBusiness,dc=domain,dc=local" 
02.
 
03.
Set objCommand = CreateObject("ADODB.Command") 
04.
Set objConnection = CreateObject("ADODB.Connection") 
05.
objConnection.Provider = "ADsDSOObject" 
06.
objConnection.Open "Active Directory Provider" 
07.
objCommand.ActiveConnection = objConnection 
08.
SearchScope = "subtree" 
09.
 
10.
FilterString = "(&(objectCategory=person)(objectClass=user)" _ 
11.
        & "(proxyAddresses=*)" _ 
12.
        & "(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" 
13.
 
14.
Attributes = "adspath" 
15.
LDAPQuery = "<LDAP://" & StartNode & ">;" & FilterString & ";" _ 
16.
        & Attributes & ";" & SearchScope 
17.
 
18.
objCommand.CommandText = LDAPQuery 
19.
objCommand.Properties("Page Size") = 1000 
20.
objCommand.Properties("Timeout") = 30 
21.
objCommand.Properties("Cache Results") = False 
22.
 
23.
Set objRecordSet = objCommand.Execute 
24.
 
25.
If not objRecordSet.eof then  
26.
   objRecordSet.MoveFirst 
27.
 
28.
   Do Until objRecordSet.EOF 
29.
      strUserPath = objRecordSet.Fields("ADsPath").Value 
30.
      Set objUser = GetObject(strUserPath) 
31.
      If objUser.MSExchHideFromAddressLists = False then 
32.
         objUser.MSExchHideFromAddressLists = True 
33.
         objUser.SetInfo 
34.
         objRecordSet.MoveNext 
35.
      End if 
36.
   Loop 
37.
End If 
38.
 
39.
objRecordset.Close 
40.
objConnection.Close 
41.
wscript.echo "Fertig"
Grüße Uwe
Bitte warten ..
Mitglied: Gl05e
27.09.2013 um 11:50 Uhr
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.
Bitte warten ..
Mitglied: colinardo
27.09.2013, aktualisiert um 11:59 Uhr
Ach so, da hatten wir uns missverstanden. Das ist kein Problem. Dafür musst du nur die Zeile 12 des Codes so ändern:
01.
& "(userAccountControl:1.2.840.113556.1.4.803:=2))" 
quasi nur das Ausrufezeichen(negation) und zwei Klammern weg machen.

Grüße Uwe
Bitte warten ..
Mitglied: Gl05e
27.09.2013 um 12:03 Uhr
VIelen DAnk, werde es gleich ausprobieren
Bitte warten ..
Mitglied: Gl05e
27.09.2013 um 12:08 Uhr
hi, Hi, bei mir kommt leider folgende fehlermeldung:

Zeile 23
Zeichen 1
Der übermittelte Verzeichnispfad ist ungültig
Code 80040E37
Quelle: Acrive Directory
Bitte warten ..
Mitglied: colinardo
27.09.2013, aktualisiert um 12:12 Uhr
Dann hast du nicht wie erwähnt in Zeile 1 des Scripts den Distinguished Name worin deine User liegen an deine Umgebung korrekt angepasst ...
Bitte warten ..
Mitglied: Gl05e
27.09.2013, aktualisiert um 12:36 Uhr
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?
Bitte warten ..
Mitglied: colinardo
27.09.2013, aktualisiert um 12:37 Uhr
Zitat von Gl05e:
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
Bitte warten ..
Mitglied: Gl05e
27.09.2013, aktualisiert um 12:40 Uhr
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?
Bitte warten ..
Mitglied: colinardo
27.09.2013 um 12:43 Uhr
Zitat von Gl05e:
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
Bitte warten ..
Mitglied: Gl05e
27.09.2013 um 12:44 Uhr
ich glaube ich habe den Fehler gefunden habe eine ou zu viel.

man man
Bitte warten ..
Mitglied: Gl05e
27.09.2013, aktualisiert um 12:46 Uhr
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.
Bitte warten ..
Mitglied: colinardo
27.09.2013, aktualisiert um 13:20 Uhr
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)
01.
$OU = "cn=Users,dc=domain,dc=local" 
02.
$objSearch = New-Object System.DirectoryServices.DirectorySearcher  
03.
$objSearch.PageSize = 15000  
04.
$objSearch.Filter = "(&(objectCategory=User)(objectCategory=Person)(userAccountControl:1.2.840.113556.1.4.803:=2))" 
05.
$objSearch.SearchRoot = "LDAP://$OU"  
06.
$allUsers = $objSearch.FindAll()  
07.
foreach ($user in $allUsers) {  
08.
	$o = $user.GetDirectoryEntry() 
09.
	$o.MSExchHideFromAddressLists = $true 
10.
	$o.CommitChanges() 
11.
}
Richtig angewendet funktionieren beide Scripte, ansonsten machst du grundlegend was falsch...

Grüße Uwe
Bitte warten ..
Mitglied: colinardo
27.09.2013, aktualisiert um 13:21 Uhr
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 !!
Bitte warten ..
Mitglied: Gl05e
27.09.2013 um 14:08 Uhr
Hi, es ist ein MS 2003 R2 Server.
Bitte warten ..
Mitglied: colinardo
27.09.2013, aktualisiert um 14:20 Uhr
Dann lösch mal die Zeilen 31 und 35 des Codes
also anstatt
01.
 If objUser.MSExchHideFromAddressLists = False then 
02.
         objUser.MSExchHideFromAddressLists = True 
03.
         objUser.SetInfo 
04.
         objRecordSet.MoveNext 
05.
End if
sollte es danach so aussehen:
01.
         objUser.MSExchHideFromAddressLists = True 
02.
         objUser.SetInfo 
03.
         objRecordSet.MoveNext
könnte sein das das Attribut der User noch nicht im AD gesetzt sind.
und danach bitte ein Refresh deiner MMC
Bitte warten ..
Mitglied: Gl05e
30.09.2013, aktualisiert um 16:31 Uhr
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
Refresh der MMChabe ich gemacht
Bitte warten ..
Mitglied: colinardo
30.09.2013 um 17:59 Uhr
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
Bitte warten ..
Mitglied: Gl05e
01.10.2013 um 09:32 Uhr
Hi,

super, vielen Dank es hat geklappt
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Exchange Server
gelöst Exchange 2013 - Kalenderfreigaben für einen User auflisten lassen (9)

Frage von Stefan007 zum Thema Exchange Server ...

Exchange Server
gelöst Exchange Einführung - Kalender aller User untereinander freigeben und hinzufügen (10)

Frage von Mosurama zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...