New-AADConnectImportRuleDisableExpiredAccounts.TempPoint.ps1

<#PSScriptInfo
 
.VERSION 2.0
 
.GUID 02d90a6f-9352-42e8-90e4-6025a16ff117
 
.DESCRIPTION Create a new AADConnect rule to add a proxy address pattern to on-premises Active Directory objects.
 
.AUTHOR Aaron Guilmette
 
.COMPANYNAME Microsoft
 
.COPYRIGHT 2022
 
.TAGS Email Address Policy Template
 
.LICENSEURI
 
.PROJECTURI https://www.undocumented-features.com/2016/08/10/use-aadconnect-to-add-a-proxy-address/
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
THIS CODE AND ANY ASSOCIATED INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK OF USE, INABILITY TO USE, OR RESULTS FROM THE USE OF
THIS CODE REMAINS WITH THE USER.
 
Author: Aaron Guilmette
        aaron.guilmette@microsoft.com
#>


<#
.SYNOPSIS
Create a new AADConnect rule to add a new proxy address that
will synchronized back to on-premises AD objects.
 
.PARAMETER LowestPrecedence
Automatically create new rule as the lowest precedence rule (highest priority).
 
.PARAMETER NewProxyAddressDomain
Specify the new proxy address domain, e.g. contoso.com.
 
.PARAMETER Precedence
Choose a precedence value.
 
.EXAMPLE
.\New-AADConnectRuleAddProxy.ps1 -NewProxyAddressDomain contoso.com -Lowest
 
Create a new AAD Connect rule to add the proxy address matching contoso.com
using the lowest available precedence rule.
 
.LINK
https://aka.ms/aarongallery
 
.LINK
https://www.undocumented-features.com/2016/08/10/use-aadconnect-to-add-a-proxy-address/
 
#>

param(
    [switch]$LowestPrecedence,
    [string]$NewProxyAddressDomain,
    [string]$Precedence = "90"
    )
$NewProxy = [scriptblock]::Create("`"$NewProxyAddressDomain`"")
[string]$Identifier = [Guid]::NewGuid().ToString()
[string]$Connector = (Get-ADSyncConnector | ? { $_.ConnectorTypeName -eq "AD" }).Identifier.ToString()
If ($LowestPrecedence)
    {
    [array]$AllRulesPrecedence = (Get-ADSyncRule).Precedence
    $Precedence = (($AllRulesPrecedence | Measure-Object -Minimum).Minimum -1)
    }

New-ADSyncRule  `
-Name 'Out to AD - Add Proxy Address' `
-Identifier $Identifier `
-Description '' `
-Direction 'Outbound' `
-Precedence $Precedence `
-PrecedenceAfter '00000000-0000-0000-0000-000000000000' `
-PrecedenceBefore '00000000-0000-0000-0000-000000000000' `
-SourceObjectType 'person' `
-TargetObjectType 'user' `
-Connector $Connector `
-LinkType 'Join' `
-SoftDeleteExpiryInterval 0 `
-ImmutableTag '' `
-OutVariable syncRule

Add-ADSyncAttributeFlowMapping  `
-SynchronizationRule $syncRule[0] `
-Source @('proxyAddresses','mailNickname') `
-Destination 'proxyAddresses' `
-FlowType 'Expression' `
-ValueMergeType 'MergeCaseInsensitive' `
-Expression "IIF(InStr([proxyAddresses],$NewProxy,1,vbTextCompare)=1,[proxyAddresses],""smtp:"" & [mailNickname] & ""@"" & $NewProxy)" `
-OutVariable syncRule

New-Object  `
-TypeName 'Microsoft.IdentityManagement.PowerShell.ObjectModel.ScopeCondition' `
-ArgumentList 'mailNickname','','ISNOTNULL' `
-OutVariable condition0

Add-ADSyncScopeConditionGroup  `
-SynchronizationRule $syncRule[0] `
-ScopeConditions @($condition0[0]) `
-OutVariable syncRule

Add-ADSyncRule  `
-SynchronizationRule $syncRule[0]

Get-ADSyncRule  `
-Identifier $Identifier