# Autor: Hans Willi Kremer, NETsec GmbH & Co. KG, www.netsec.de # Datum: 2010-01-01 # Ziel: Hinzufügen einer neuen primären SMTP-Proxyadresse von benutzerdefinierten Öffentlichen Ordnern # 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 $OldPrimarySMTP = "root.domain$" $NewPrimarySMTP = "bgetem.de$" $Logfile="c:\ModifyPublicFolder.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) # Alte primäre Adresse ermitteln und als neue primäre SMTP mit neuer Domäne speichern if ($typ -ceq "SMTP:" -and $address -match $OldPrimarySMTP) { $newaddress = $address.Replace($OldPrimarySMTP.Substring(0, $OldPrimarySMTP.Length - 1) , $NewPrimarySMTP.Substring(0, $NewPrimarySMTP.Length - 1)) $newaddress = $newaddress.ToLower() "neue Adresse: $newaddress" | out-file -filepath $Logfile -encoding default -append $PublicFolder.proxyAddresses += "SMTP:$newaddress" #Änderungen wegschreiben / save modifications if ($PublicFolder -ne $null){$PublicFolder.setinfo()} #"Adresse: $fulladdress wurde geändert" | out-file -filepath $Logfile -encoding default -append } } } } } "Ende" | out-file -filepath $Logfile -encoding default -Append