Exchange 2007 recipient policies... uhhh Email Address Policies

In Exchange 2007 wordt er anders omgegaan met recipient policies. Ze heten nu dus ook Email Address Policies (EAP). Waar je voorheen nog de Recipient Update Service had die de recipient policies verwerkte en met enige vertraging emailaddressen stampte op mail(box) enabled objecten, gaat dat nu direct bij het aanmaken van een mail(box) enabled object of bij het aanmaken van een nieuwe EAP.
More...
Een andere verandering bij Exchange 2007 is dat het LDAP filter vervangen is door een OPATH filter, wat het leven makkelijker moet maken. In principe werkt het nog hetzelfde als een LDAP filter alleen hebben ze de | en & tags vervangen door -and en -or en zijn deze tags niet meer opgenomen aan het begin van je geneste scope, maar tussendoor.

Een LDAP filter dat er vroeger zo uit zag:

(&(&(|(&(&(objectCategory=user)(msExchHomeServerName=/o=ORG/ou=SITE/cn=Configuration/cn=Servers/cn=*)))(&(|(objectCategory=group)(objectCategory=msExchDynamicDistributionList))(displayname=IT*)))))

Ziet er nu zo uit:

(ServerLegacyDN -like "/o=ORG/ou=SITE/cn=Configuration/cn=Servers/cn=*" ) -or ( ( RecipientType -eq "MailEnabledUniversalDistributionGroup" –or RecipientType -eq "MailEnabledUniversalSecurityGroup" -or RecipientType -eq "MailEnabledNonUniversalGroup" -or RecipientType -eq "DynamicDL") -and ( DisplayName -like "IT*" ) )

Als je het mij vraagt, maakt het allemaal weinig verschil, maar ze moeten de programmeurs natuurlijk wel wat te programmeren geven ;). Er zit echter wel een addertje onder het gras, zoals je ziet aan de propertynamen. Hier kom ik verderop in de post op terug.

Een nadeel van de nieuwe policystructuur is dat je in Exchange 2003 niet de nieuwe Exchange 2007 policies meer kan bewerken. Vice versa wel. Je moet dan de Exchange 2003 policy 'upgraden' tot Exchange 2007 EAP met het commando:

Set-EmailAddressPolicy "Default Policy" –IncludedRecipients AllRecipients

note: Dit is meteen het juiste commando om je default policy te upgraden

LET OP: Er bestaat ook een -ForceUpgrade parameter voor Set-EmailAddressPolicy. GEBRUIK DEZE NIET!!!
Deze is namelijk alleen bedoelt om een vraag voor confirmatie te onderdrukken. Het vervangt dus niet het filter. Je zult echt de LDAP string moeten ombouwen naar OPATH en deze meegeven bij de 'Upgrade'

...page...
De reden dat je een EAP niet kan wijzigen in Exchange 2003 is omdat Exchange 2007 bij het verwerken van de policy gebruik maakt van het RecipientFilter property en Exchange 2003 van het LdapRecipientFilter. Aangezien Exchange 2003 niet kan omgaan met OPATH wordt deze property niet aangepast. Exchange 2007 zal echter wel het LdapRecipientFilter aanpassen.
Wees gerust. Bij het gebruik van Set-EmailAddressPolicy zal de policy niet meteen uitgevoerd worden. Hiervoor moet je gebruik maken van Update-EmailAddressPolicy.

Dit is anders dan bij het aanmaken van nieuwe policies. Bij het maken van nieuwe policies worden de policies meteen applied op alle objecten waar de policy van op toepassing is en waar de EmailAddressPolicyEnabled property op $true staat. GOED testen dus alvorens je het implementeert.

Bij het creeren of wijzigen van een policy kan je gebruik maken van een aantal standaard condities die allemaal met een AND worden gewaardeerd, of van een custom filter (waardes binnen een conditie worden met OR gewaardeerd). De standaard condities zijn de volgende:

-ConditionalCompany -ConditionalCustomAttribute1 t/m 15 -ConditionalDepartment -ConditionalStateOrProvince -IncludedRecipients

Als iets anders wilt, zul je gebruik moeten maken van een OPATH filter en de volgende parameter:

-RecipientFilter

Als je deze gebruikt, mag je geen van de standaard condities meer gebruiken. Voor simpele policies kan je gebruik maken van de standaard condities, maar in de praktijk zit je al snel vast aan een OPATH filter.

Een voorbeeld van een nieuwe policy met standaard condities is de volgende:

New-EmailAddressPolicy -Name:"Test Policy" –IncludedRecipients:AllRecipients -EnabledEmailAddressTemplates:"SMTP:%g.%r .%s@test.com","smtp:@test.com"

Bovenstaand commando maakt een nieuwe policy aan onder de naam "Test Policy" en applied deze op alle mail(box)enabled objecten. Het address template dat gebruikt wordt is een verplicht primair SMTP address met de opmaak voornaam.achternaam@test.com, waarbij alle spaties in de achternaam vervangen zijn door punten, en een secundair SMTP address met de opmaak exchangeallias@test.com" .

Voor een overzicht hoe je addresstemplates maakt.. Neem HIER een kijkje.
...page...
Een van de meest gebruikte condities is de -IncludedRecipients parameter.
Hierbij geef je het objecttype mee waar de policy op van toepassing is. Hieronder heb ik een overzicht geplaasts van de verschillende types. Je kan zowel de waarde als de waarde naam meegeven als waarde:

Object Type Waarde Waarde naam
Alle mail(box)enabled objecten GEEN WAARDE AllRecipients
User Mailbox 1 UserMailbox
Linked Mailbox 2 LinkedMailbox
Shared Mailbox 4 SharedMailbox
Legacy Mailbox 8 LegacyMailbox
Room Mailbox 16 RoomMailbox
Equipment Mailbox 32 EquipmentMailbox
Mail Contact 64 MailContact
Mail-enabled User 128 MailUser
Mail-enabled Universal Distribution Group 256 MailUniversalDistributionGroup
Mail-enabled non-Universal Distribution Group 512 MailNonUniversalGroup
Mail-enabled Universal Security Group 1024 MailUniversalSecurityGroup
Dynamic Distribution Group 2048 DynamicDistributionGroup
Mail-enabled Public Folder 4096 PublicFolder
System Attendant Mailbox 8192 SystemAttendantMailbox
Mailbox Database Mailbox 16384 SystemMailbox
Across-Forest Mail Contact 32768 MailForestContact
User 65536 User
Contact 131072 Contact
Universal Distribution Group 262144 UniversalDistributionGroup
Universal Security Group 524288 UniversalSecurityGroup
Non-Universal Group 1048576 NonUniversalGroup
Disabled User 2097152 DisabledUser
Microsoft Exchange 4194304 MicrosoftExchange

...page...
Zoals ik al eerder melde zit je al snel aan OPATH filters vast. Het lullige van OPATH filters is dat je niet direct de LDAP naam van het property mag gebruiken en dat ook niet alle LDAP properties van een object beschikbaar zijn. Voor het gemak heb ik het huidige overzicht opgenomen:

LDAP OPATH
authorig AcceptMessagesOnlyFrom
c CountryOrRegion
canonicalname RawCanonicalName
cn CommonName
co Co
company Company
countrycode CountryCode
deleteditemflags DeletedItemFlags
deliverandredirect DeliverToMailboxAndForward
delivcontlength MaxReceiveSize
department Department
description Description
directreports DirectReports
displayname DisplayName
displaynameprintable SimpleDisplayName
distinguisedname Id
dlmemrejectperms RejectMessagesFromDLMembers
dlmemsubmitperms AcceptMessagesOnlyFromDLMembers
extensionattribute1 customAttribute1
extensionattribute2 customAttribute2
extensionattribute3 customAttribute3
extensionattribute4 customAttribute4
extensionattribute5 customAttribute5
extensionattribute6 customAttribute6
extensionattribute7 customAttribute7
extensionattribute8 customAttribute8
extensionattribute9 customAttribute9
extensionattribute10 customAttribute10
extensionattribute11 customAttribute11
extensionattribute12 customAttribute12
extensionattribute13 customAttribute13
extensionattribute14 customAttribute14
extensionattribute15 customAttribute15
facsimiletelephonenumber fax
garbagecollperiod RetainDeletedItemsFor
givenname FirstName
grouptype GroupType
objectguid Guid
hidedlmembership HiddenGroupMembershipEnabled
homemdb Database
homemta HomeMTA
homephone HomePhone
info Notes
initials Initials
internetencoding InternetEncoding
l City
legacyexchangedn LegacyExchangeDN
localeid LocaleID
mail WindowsEmailAddress
mailnickname Alias
managedby ManagedBy
manager Manager
mapirecipient MapiRecipient
mdboverhardquotalimit ProhibitSendReceiveQuota
mdboverquotalimit ProhibitSendQuota
mdbstoragequota IssueWarningQuota
mdbusedefaults UseDatabaseQuotaDefaults
member Members
memberof MemberOfGroup
mobile MobilePhone
msds-phoneticompanyname PhoneticCompany
msds-phoneticdepartment PhoneticDepartment
msds-phoneticdsiplayname PhoneticDisplayName
msds-phoneticfirstname PhoneticFirstName
msds-phoneticlastname PhoneticLastName
msexchassistantname AssistantName
msexchdynamicdlbasedn RecipientContainer
msexchdynamicdlfilter LdapRecipientFilter
msexchelcexpirysuspensionend ElcExpirationSuspensionEndDate
msexchelcexpirysuspensionstart ElcExpirationSuspensionStartDate
msexchelcmailboxflags ElcMailboxFlags
msexchexpansionservername ExpansionServer
msexchexternaloofoptions ExternalOofOptions
msexchhidefromaddresslists HiddenFromAddressListsEnabled
msexchhomeservername ServerLegacyDN
msexchmailboxfolderset MailboxFolderSet
msexchmailboxguid ExchangeGuid
msexchmailboxsecuritydescriptor ExchangeSecurityDescriptor
msexchmailboxtemplatelink ManagedFolderMailboxPolicy
msexchmasteraccountsid MasterAccountSid
msexchmaxblockedsenders MaxBlockedSenders
msexchmaxsafesenders MaxSafeSenders
msexchmdbrulesquota RulesQuota
msexchmessagehygieneflags MessageHygieneFlags
msexchmessagehygienescldeletethreshold SCLDeleteThresholdInt
msexchmessagehygienescljunkthreshold SCLJunkThresholdInt
msexchmessagehygienesclquarantinethreshold SCLQuarantineThresholdInt
msexchmessagehygienesclrejectthreshold SCLRejectThresholdInt
msexchmobilealloweddeviceids ActiveSyncAllowedDeviceIDs
msexchmobiledebuglogging ActiveSyncDebugLogging
msexchmobilemailboxflags MobileMailboxFlags
msexchmobilemailboxpolicylink ActiveSyncMailboxPolicy
msexchomaadminextendedsettings MobileAdminExtendedSettings
msexchomaadminwirelessenable MobileFeaturesEnabled
msexchpfrooturl PublicFolderRootUrl
msexchpftreetype PublicFolderType
msexchpoliciesexcluded PoliciesExcluded
msexchpoliciesincluded PoliciesIncluded
msexchprotocolsettings ProtocolSettings
msexchpurportedsearchui PurportedSearchUI
msexchquerybasedn QueryBaseDN
msexchqueryfilter RecipientFilter
msexchqueryfiltermetadata RecipientFilterMetadata
msexchrecipientdisplaytype RecipientDisplayType
msexchrecipienttypedetails RecipientTypeDetailsValue
msexchreciplimit RecipientLimits
msexchrequireauthtosendto RequireAllSendersAreAuthenticated
msexchresourcecapacity ResourceCapacity
msexchresourcedisplay ResourcePropertiesDisplay
msexchresourcemetadata ResourceMetaData
msexchresourcesearchproperties ResourceSearchProperties
msexchsafesendershash SafeSendersHash
msexchsaferecipientshash SafeRecipientsHash
msexchumaudiocodec CallAnsweringAudioCodec
msexchumdtmfmap UMDtmfMap
msexchumenabledflags UMEnabledFlags
msexchumlistindirectorysearch AllowUMCallsFromNonUsers
msexchumoperatornumber OperatorNumber
msexchumpinchecksum UMPinChecksum
msexchumrecipientdialplanlink UMRecipientDialPlanId
msexchumserverwritableflags UMServerWritableFlags
msexchumspokenname UMSpokenName
msexchumtemplatelink UMMailboxPolicy
msexchuseoab OfflineAddressBook
msexchuseraccountcontrol ExchangeUserAccountControl
msexchuserculture LanguagesRaw
msexchversion ExchangeVersion
name Name
ntsecuritydescriptor NTSecurityDescriptor
objectcategory ObjectCategory
objectclass ObjectClass
objectsid Sid
oofreplytooriginator SendOofMessageToOriginatorEnabled
otherfacsimiletelephonenumber OtherFax
otherhomephone OtherHomePhone
othertelephone OtherTelephone
pager Pager
pfcontacts PublicFolderContacts
physicaldeliveryofficename Office
postalcode PostalCode
postofficebox PostOfficeBox
primarygroupid PrimaryGroupId
proxyaddresses EmailAddresses
publicdelegates GrantSendOnBehalfTo
pwdlastset PasswordLastSetRaw
reporttooriginator ReportToOriginatorEnabled
reporttoowner ReportToManagerEnabled
samaccountname SamAccountName
showinaddressbook AddressListMembership
sidhistory SidHistory
sn LastName
st StateOrProvince
submissioncontlength MaxSendSize
streetaddress StreetAddress
targetaddress ExternalEmailAddress
telephoneassistant TelephoneAssistant
telephonenumber Phone
textencodedoraddress TextEncodedORAddress
title Title
unauthorig RejectMessagesFrom
unicodepwd UnicodePassword
useraccountcontrol UserAccountControl
usercertificate Certificate
userprincipalname UserPrincipalName
usersmimecertificate SMimeCertificate
whenchanged WhenChanged
whencreated WhenCreated
wwwhomepage WebPage

Het maken van OPATH filters is verder redelijk gelijk aan de oude LDAP filters behalve dan het verschil in gebruik van operators. In plaats van $ en |, gebruik je -and en -or, en je plaatst ze niet aan het begin van de scope, maar tussen scopes. Dit is eigenlijk zoals je bij veel gebruikte programmeertalen je EN en OF clausules zou opbouwen. Ik zal hier verder niet op ingaan. Oefening baart kunst zeg ik altijd. Maar..... PAS nogmaals op... Een nieuwe policy wordt meteen applied. Het is handiger je OPATH filter te testen, door bijvoorbeeld een Dynamic Distribution Group aan te maken, zodat je kan zien wie de members zijn.

Voor wat basisbegrippen voor het creeren van een OPATH filter kan je hier terecht:
https://technet.microsoft.com/en-us/library/bb124268.aspx

Als je hulp zoekt bij het converteren van je huidige LDAP filters, lees dan dit:
https://msexchangeteam.com/archive/2007/03/12/436983.aspx