Home > Mobile >  Powershell to Update AD proxyAddresses
Powershell to Update AD proxyAddresses

Time:10-09

I am trying proxy address for AD users. I am assuming , its not correctly working part related to the -Add @{proxyAddresses="smtp:" $_.alias $proxydomain}.

I have checked proxy address attribute in AD Users. its displaying like below.

smtp:@domain.onmicrosoft.com

script :

 $proxydomain = "@domain.onmicrosoft.com"
    Get-ADUser -Filter {(emailaddress -like "*@contoso.com" -and Enabled -eq $true -and sAMAccountName -like "TYU*")} -SearchBase "OU=IT,DC=contoso,DC=local" -SearchScope Subtree -Properties *  | foreach-object {

    $alias=$_.mail.Split("@")[0]

        if ($_.Proxyaddresses -match $_.alias $proxydomain  )
    {
        Write-Host "Result: ProxyAddresses value already exists for $($_.displayname); No action taken."
    }

        else
    {
      Set-ADUser -Identity $_.SamAccountName -Add @{proxyAddresses="smtp:" $_.alias $proxydomain}

        Write-Host "Result: Added proxyAddresses value to Account"
     }

   }

CodePudding user response:

You start out by assigning the user-part of the primary mail address to a variable $alias:

$alias=$_.mail.Split("@")[0]

But the you refer to $_.alias in the following lines:

if ($_.Proxyaddresses -match $_.alias $proxydomain  )

This is not going to work, because $_.alias resolves to the value of a property named alias on the ADUser object you're currently processing - and since no AD user attribute with the name alias exists, $_.alias evaluates to $null.

Change the code to evaluate the variable instead and it'll work:

$proxydomain = "@domain.onmicrosoft.com"
Get-ADUser -Filter { (emailaddress -like "*@contoso.com" -and Enabled -eq $true -and sAMAccountName -like "TYU*") } -SearchBase "OU=IT,DC=contoso,DC=local" -SearchScope Subtree -Properties *  | foreach-object {

    # grab user alias
    $alias = $_.mail.Split("@")[0]

    # construct the new address up front and assign it to a single variable
    $newProxyAddress = "$alias$proxydomain"

    # -match is a regex operator, escape appropriately
    if ($_.ProxyAddresses -match [regex]::Escape($newProxyAddress)) {
        Write-Host "Result: ProxyAddresses value already exists for $($_.displayname); No action taken."
    }
    else {
        # Now we only have a single variable that needs to be expanded in the string
        Set-ADUser -Identity $_.SamAccountName -Add @{proxyAddresses = "smtp:$newProxyAddress"}

        Write-Host "Result: Added proxyAddresses value to Account"
    }
}
  • Related