# Autor: Hans Willi Kremer, NETsec GmbH & Co. KG, www.netsec.de # Datum: 2010-01-01 # Ziel: Löschen einer sekundären SMTP-Proxyadresse von benutzerdefinierten Öffentlichen Ordnern # 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 $ProxyAddressToRemove = "bgetem.de$" $Logfile="c:\removePublicFolder.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) # bestehende sekundäre Adresse löschen # remove address if it is already present and a secondary one if($typ -ceq "smtp:" -and $address -match $ProxyAddressToRemove) { $PublicFolder.proxyAddresses.Remove("$fulladdress") "Adresse: $fulladdress wurde gelöscht" | out-file -filepath $Logfile -encoding default -append #Änderungen wegschreiben / save modifications if ($PublicFolder -ne $null){$PublicFolder.setinfo()} } } } } } "Ende" | out-file -filepath $Logfile -encoding default -Append