# Autor: Hans Willi Kremer, NETsec GmbH & Co. KG, www.netsec.de # Datum: 2010-01-01 # Ziel: Setzen einer ausgewählten primären SMTP-Proxyadresse von benutzerdefinierten Öffentlichen Ordnern auf sekundär # Dabei wird der Name der bisherigen primären Adresse zur Bildung der neuen genutzt # System: Exchange 2000 # Verwendet: Powershell, .NET 3.1, Quest Power GUI mit Active Roles Management Shell for Active Directory # Hinweis: Im Script ist keine Fehlerbahndlung eingebaut # Beginn $SMTPAddressToModify = "bgetem.de$" $Logfile="c:\ModifySecondaryPublicFolder.log" "Start" | out-file -filepath $Logfile -encoding default -Append # Durchsuche die Objekte in folgender Organisationseinheit. Dort sind unter anderem # alle mail-aktivierten Öffentlichen Ordner aufgeführt. $object=get-QADObject -SearchRoot 'root.domain/Microsoft Exchange System Objects' $anzahl=$object.Count "$anzahl Objekte in der OU Microsoft Exchange System Objects gefunden" | out-file -filepath $Logfile -encoding default -append for ($memberCount=0; $memberCount -le $anzahl-1; $memberCount++) { $PublicFolderName=$object[$memberCount] "$PublicFolderName wurde gefunden" | out-file -filepath $Logfile -encoding default -append # Folgende Objekte sollen nicht überprüft werden # die Liste kann beliebig erweitert werden switch -wildcard ($PublicFolderName.name) { 'Default*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'internal*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'Schedule+ Free Busy*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'Offline Address Book*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'schema-root*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'globalevents*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'exchangeV1*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'microsoft*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'OWAScratchPad*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'SystemMailbox*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'Exchange Install*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} 'StoreEvents*' {"$PublicFolderName wird laut Regeln nicht bearbeitet" | out-file -filepath $Logfile -encoding default -append} default { # ansonsten Referenz auf das Objekt vornehmen $PublicFolder=[ADSI]"LDAP://$PublicFolderName" $PublicFolderEmail=$PublicFolder.proxyAddresses "$PublicFolderName mit Pfad: $PublicFolder und Adressen: $PublicFolderEmail wird laut Regeln bearbeitet" | out-file -filepath $Logfile -encoding default -append # alle ProxyAdressen des Öffentlichen Ordners durchlaufen for ($adrCount=0; $adrCount -le $PublicFolderEmail.count-1 ;$adrCount++) { # Vollständige Adressierung ("SMTP:foo@ar.com") $fulladdress=$PublicFolderEmail[$adrCount] # Email-Typ-Teil (z.B.SMTP, X400 etc.) $typ=$fulladdress.substring(0,5) # Ermitteln des Adressteiles (z.B.foo@bar.com) $address=$fulladdress.substring(5) # Adresse ermitteln und auf sekundäre SMTP-Adresse umstellen if ($typ -ceq "SMTP:" -and $address -match $SMTPAddressToModify) { $modifiedFullAddress = "smtp:" + $address.ToLower() $PublicFolderEmail[$adrCount] = $modifiedFullAddress #Änderungen wegschreiben / save modifications if ($PublicFolder -ne $null){$PublicFolder.setinfo()} "Adresse wurde geändert" | out-file -filepath $Logfile -encoding default -append } } } } } "Ende" | out-file -filepath $Logfile -encoding default -Append