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.
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'
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.
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 |
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 |
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
Comments
Anonymous
January 01, 2003
Exchange invoer/uitvoer leesvoer Een van de grotere uitdagingen bij het ontwerpen van een Exchange serverinstallatieAnonymous
January 01, 2003
Exchange invoer/uitvoer leesvoer Een van de grotere uitdagingen bij het ontwerpen van een Exchange serverinstallatie