UPDATE: This script has moved to the PowerShell Gallery. Future updates will be made here: https://www.powershellgallery.com/packages/AADConnectPermissions/

Use this script to configure advanced AAD Connect permissions for the following features:

You can choose to run one or more options to configure feaures.  For any parameters not specified, defaults will attempt to be located from the AAD Connect configuration. 

If you have not yet configured Group WriteBack, you can use the tool to create the GroupWriteBack container using the -GroupWriteBackOU parameter.  After running this command, you will need to re-run the AAD Connect setup, modify the configuration, enable Group WriteBack, and then select the newly created container.

Check out the blog at https://www.undocumented-features.com/2017/08/16/advanced-aad-connect-permissions-configuration/ that describes each of the parameters in detail as well as gives some background on how the tasks are completed.

UPDATES

PowerShell
Edit|Remove
<#     
.SYNOPSIS  
    Set AAD Connect Permissions for service account 
 
.DESCRIPTION  
    Use this script to set permissions for the AAD Connect Service Account. 
 
.PARAMETER AllPermissions 
Use this parameter to configure all object permissions: 
- DeviceWriteBack 
- ExchangeHybridWriteBack 
- GroupWriteBack 
- PasswordHashSync 
- PasswordWriteBack 
 
.PARAMTER ContinueOnError 
Continue to other functions when a terminating error is encountered. 
 
.PARAMETER Debug 
Enable debug logging. 
 
.PARAMETER DeviceWriteBack 
Use this parameter to configure Device Write Back. Using this parameter will 
require use of the AAD Connect modules, so AAD Connect must already be 
installed. 
 
.PARAMETER DeviceWriteBackBeltAndSuspenders 
The msDS-KeyCredentialLink attribute write permission should be granted by 
membership in the Key Admins group; however, in environments where things 
may not exist by default or through other configuration settings that are 
unique to that environment, this switch will allow the explicit delegation 
of those permissions. 
 
.PARAMETER Domain 
Used to specify the NetBIOS domain name.  If this parameter is omitted, the 
current NetBIOS domain name is used. 
 
.PARAMETER ExchangeHybridWriteBack 
Use this parameter to set the permissions for Exchange Hybrid WriteBack. 
 
.PARAMETER ExchangeHybridWriteBackOUs 
Use this parameter to specify target OUs to enable the service account writeback 
permissions. If this parameter is omitted, access is granted at the domain root. 
 
.PARAMETER Forests 
If you have more than one forest in your AAD Connect topology, you can use the  
Forests parameter to specify them for device writeback.  You must be logged on  
with an account that has enterprise admin privileges in the target forests. 
 
.PARAMETER GroupWriteBack 
Use this parameter to configure Office 365 Group writeback permissions.  Uses  
GroupWriteBackOU if the parameter is specified; otherwise, uses default value 
in AD connector.  If no container is specified and Office 365 group writeback 
has not been configured in AAD Connect, the script will exit. 
 
.PARAMETER GroupWriteBackOU 
Use this parameter to specify the Office 365 Groups writeback container.  If the 
container exists, the account specified will be granted access.  If the 
GroupWriteBackOU is specified and does not exist, it will be created (as long as 
the DN is formatted correctly and references a valid domain). 
 
.PARAMETER Logfile 
Specify a log file. If no log file is specified, one will be created with the current 
timestamp. 
 
.PARAMETER msDSConsistencyGuid 
Use this parameter to enable write permissions for the msDS-ConsistencyGuid. Uses 
ExchangeHybridWriteBackOUs parameter if set.  If not set, defaults to domain root. 
 
.PARAMETER PasswordHashSync 
Use this parameter to set 'Replicating Directory Changes' and 'Replicating  
Directory Changes All' permissions. 
 
.PARAMETER PasswordWriteBack 
Use this parameter to enable password writeback.  Uses  
ExchangeHybridWriteBackOUs parameter if specified; otherwise, sets 
permissions at domain root. 
 
.PARAMETER PasswordWriteBackOUs 
Use this parameter to specify target OUs to enable the service account writeback 
permissions. If this parameter is specified in conjunction with the parameter 
ExchangeHybridWriteBackOUs, this parameter will take effect.  If this parameter 
is omitted but the ExchangeHybridWriteBackOUs parameter is specified, 
PasswordWriteBack will use the ExchangeHybridWriteBackOUs values.  If neither 
parameter is supplied, then permissions will be delegated at the domain root. 
 
.PARAMETER SkipInetOrgPerson 
Skip updating permissions for InetOrgPerson objects. 
 
.PARAMETER TenantCredential 
Use this parameter to specify the tenant credential used when returning domains 
from Office 365 for Device WriteBack.  If DeviceWriteBack is not selected, this 
parameter is not used. 
 
.PARAMETER TenantID 
Use this parameter to specify the tenant GUID used when configuring Device 
WriteBack.  If DeviceWriteBack is not selected, ths parameter is not used. 
 
.PARAMETER UpdateAdminSDHolder 
If you have objects protected by adminSDHolder, you can use this switch to allow 
write-back delegation for those objects. If an object is a member of a group 
protected by adminSDHolder and the AAD Connect service account is not a member 
of Domain Admins or Enterprise Admins, Exchange hybrid write-back and password 
writeback may not work. 
 
.PARAMETER User 
Specify the AAD account that will be granted permissions.  If no account is  
specified, attempt to locate the account through the connector properties. 
 
.PARAMETER VerifiedDomain 
Specify a VerfiedDomain for your AAD tenant instead of discovering a domain 
automatically. 
 
.EXAMPLE 
.\AADConnectPermissions.ps1 -AllPermissions 
 
Attempt to configure permissions for all features. 
 
.EXAMPLE 
.\AADConnectPermissions.ps1 -User AADSyncAdmin -ExchangeHybridWriteBack -GroupWriteBack 
 
Delegate Exchange Hybrid WriteBack permissions at the domain top-level to the  
user AADSyncAdmin, and enable GroupWriteBack using the value already stored in  
the AADConnect configuration. 
 
.EXAMPLE 
.\AADConnectPermissions.ps1 -User AADSyncAdmin -GroupWriteBack -GroupWriteBackOU "OU=O365 Groups,OU=Resources,DC=contoso,DC=com" 
 
Delegate Group WriteBack permissions to the account AADSyncAdmin using the  
container OU=O365 Groups,OU=Resources,DC=contoso,DC=com. If the container does  
not exist, create it and then delegate permissions. 
 
.EXAMPLE 
.\AADConnectPermissions.ps1 -User AADSyncAdmin -ExchangeHybridWriteBack -ExchangeHybridWriteBackOUs "OU=Accounts,DC=contoso,DC=com","OU=Resources,DC=contoso,DC=com" 
 
Delegate Exchange Hybrid WriteBack permissions at the the OUs OU=Accounts,DC= 
contoso,DC=com and OU=Resources,DC=contoso,DC=com to the user AADSyncAdmin. 
 
.EXAMPLE 
.\AADConnectPermissions.ps1 -PasswordHashSync 
 
Delegate 'Replicating Directory Changes' and 'Replicating Directory Changes All'  
permissions for PasswordHashSync to the user stored in the AAD Connect  
configuration. 
 
.LINK 
https://gallery.technet.microsoft.com/AD-Advanced-Permissions-49723f74 
 
.LINK 
https://blogs.technet.microsoft.com/undocumentedfeatures/2017/08/16/advanced-aad-connect-permissions-configuration/ 
 
.LINK 
https://blogs.technet.microsoft.com/undocumentedfeatures/2017/10/11/update-to-advanced-aad-connect-permissions-tool/ 
 
.NOTES 
- 2019-03-11    Added new parameters ContinueOnError and DeviceWriteBackBeltAndSuspenders. 
                - ContinueOnError will allow the script to continue to other functions, even if errors were  
                  generated for critical components. 
                - DeviceWriteBackBeltAndSuspenders updates the msDS-KeyCredentialLink attribute specifically.  The  
                  documentation states that membership in the Key Admins group is all that is necessary, but there  
                  may be instances I haven't thought of or encountered where this isn't the case. 
                Updated parameter handling for AllPermissions switch to allow excluding attributes. 
- 2019-03-06    Added support for msDS-KeyCredentialLink attribute. 
                Updated msDS-consistencyguid attribute to true. 
                Added InetOrgPerson support for ms-Ds-ConsistencyGuid. 
- 2018-11-13    Updated logging output data. 
- 2018-09-14    Updated detection for Windows Server 2016 AD Schema. 
                Updated Get-Module ADSync statement. 
- 2018-08-12    Bugfix for specifying UpdateAdminSDHolder with Exchange write back with no write back OU param. 
- 2018-06-12    Added SkipInetOrgPerson parameter per customer request. 
                Updated OU regular expression test. 
- 2018-04-04    Various bugfixes. 
- 2018-02-15     Updated VerifyADTools function 
- 2018-02-08    Moved function declarations block 
- 2018-02-06    Updated RegEx for OU path filter to include underscore (_) and CN=. 
- 2018-02-04    Updated logging capabilities, including -Logfile and -Debug parameters. 
- 2018-02-03    Updated additional functions to use VerifyADTools function 
                Added check for If (Get-Module) before removing ADSync and MSONline 
                modules 
- 2018-01-08    Updated function for msDSConsistencyGuid to use the AD Domain DN  
                if no OUs are specified for ExchangeHybridWriteBackOUs. 
- 2017-10-26    Updated MSOnline module to only be detected/installed/ during 
                device write-back configuration 
- 2017-10-19    Updated RegEx for OU path filter 
- 2017-10-11    Added support for adminSDHolder 
- 2017-10-05    Added support for msDS-ConsistencyGuid 
- 2017-08-16    Added separate parameter value for PasswordWriteBackOUs 
                Added domain validation for OUs specified in parameters 
- 2017-08-15    Added install sequence for the following modules: 
                    - Microsoft Online Services Sign-In Assistant RTW 
                    - PowerShellGet 
                    - NuGet 
                    - Windows Azure AD PowerShell 1.x (MSOnline) 
                Added support for DeviceWriteBack for multiple forests 
                Added support for Windows 10 Azure AD joined devices to device  
                writeback 
                Added support for INetOrgPerson objects to Exchange hybrid and  
                password writeback  
- 2017-08-14    Initial Release 
#>