In this guide, I’m going to show you how to update the ProxyAddresses attribute for single and multiple user accounts.
Bulk updating the ProxyAddresses is often required when migrating to Office 365, creating new accounts, adding a new domain, and so on.
To bulk update user accounts you will need to use PowerShell or a third party tool. Don’t worry if you are not familiar with PowerShell as I provide step by step instructions. If you want to skip PowerShell then I’ll show you the GUI tool I created that is easy to use and requires no coding.
Table of Contents:
- Bulk Add ProxyAddress for Multiple Users with GUI Tool
- Bulk Update Existing ProxyAddresses with GUI Tool
- Remove ProxyAddress for Multiple User Accounts
- Add ProxyAddresses using PowerShell
- Replace ProxyAddresses using PowerShell
- Remove ProxyAddresses using PowerShell
Video Tutorial
In the video below, I demonstrate how to bulk add and update the proxyAddresses attribute by using the AD Pro Toolkit.
Bulk Add ProxyAddress for Multiple Users with GUI Tool
In this example, I’m going to use the Active Directory Bulk User Update Tool. This easy to use GUI tool lets you quickly bulk update any user attribute, you can even update multiple attributes at once.
In this example, I’ll add proxyAddresses to multiple user accounts.
Step 1. Download GUI Tool
The bulk user updater is 1 of 14 tools included in the AD Pro Toolkit. You can download a free trial and try it for yourself.
Click here to download a free trial
Step 2. Open the User Bulk Updater Tool
From the list of tools click on “User Bulk Updater”.

Step 3. Download and Edit the CSV Template
1. Click the “Download CSV Template” button and save it to your computer.

2. Open the CSV template and add the new proxyaddress to the proxyAddresses column. If you are not updating other attributes you can remove them from the template to make it easier to work with.
CSV template example.
In this example, I’m adding a new proxyaddress to all of these user accounts. Existing addresses will not be modified. To modify existing addresses see the next section.

- sAMAccountName column = The user’s logon name that you want to update.
- proxyAddresses column = The new proxy address you want to add to the user account. To add multiple proxy addresses separate them with a column.
Tip: You can get a list of all user’s logon names (sAMAccountName) including their existing proxy addresses by using the export tool.
Step 4. Select Add New from Update Options
Click on the Update Options button and make sure “Add New” is selected under ProxyAddress Options.

Click OK.
Step 5. Select your CSV file and click run
Now click the “Select Template” button and select your CSV template file and click Run.

Check the logs for any errors.

To verify that the new proxyaddress was added to all of the accounts you can use the export users tool.
Click on the Export Users tool and make sure the proxyAddresses column is added, if not click on columns and add it.
Select the entire domain and OU or group and click run. Because I didn’t update all users I will filter for the new domain.
I can now see all of the accounts that the new address (newdomain123.com) has been added.

How to Update Existing ProxyAddresses using GUI Tool
What if you want to update or modify existing proxyAddresses?
No problem.
The provided csv template includes a proxyAddresses_update column. The proxyAddresses column will be the target address and the proxyAddresses_update column will be the address to replace it with.

- In the above screenshot, the user Harriett.Jones currently has the address smtp:Harriett.Jones@newdomain123.com
- It will be updated to the address smtp:Harriett.Jones_updated@newdomain123.com
In the User Bulk Updater tool click on “Update Options” and select “Update Existing”.

Click OK.
Next, click the “Select Template” button and select your CSV file.
Next, Click run.
After running the tool I’ll check the Harriett Jones account.
I can see the address smtp:Harriett.Jones@newdomain123.com
has been replaced with smtp:Harriett.Jones_updated@newdomain123.com.

To easily check multiple accounts use the export users tool to view attributes for multiple user accounts.
Remove ProxyAddress for Multiple User Accounts
Note: This will remove all proxyaddresses for the user account. This is useful if you need to reset accounts addresses so you can add them back as needed.
Step 1. Backup ProxyAddresses
Before you remove proxyaddresses I recommend backing up all users.
Open the toolkit and click on “Export Users”.

Make sure the proxyAddresses column is added and click run.
Click the export button to export the list to a file.

Step 2. Remove ProxyAddresses
Next, create a CSV template. It needs to include the users sAmAccountName and proxyAddresses column.
Put remove in the proxyAddress column.
Here is an example CSV file.

Next, open the user bulk updater tool, select your CSV file, and click run.
In this example, the logs show 36 users have been updated.

I can verify if the proxyAddress has been removed by looking at a single account or using the Export Users Tool.
You can filter the proxyAddresses column for blanks.

How to Add ProxyAddresses using PowerShell
In this first example, I’ll show you how to add a ProxyAddresses using PowerShell.
Using the -add parameter will not remove or update existing addresses, it will just add the additional address you specify.
I’m going to add a new address to the user account Adrienne.Williams.
First I’ll run a command to get the users current ProxyAddresses
get-aduser adrienne.williams -Properties ProxyAddresses | select Name, ProxyAddresses

You can see this user has one ProxyAddress. Now I will use the command below to add a second proxyaddress.
Set-ADUser Adrienne.Williams -add @{ProxyAddresses="smtp:adrienne.williams.mail.onmicrosoft.com"}
Now I’ll list the user’s addresses again and you can see the user now has two addresses.

If you want to add multiple ProxyAddresses at once use this command
Set-ADUser Adrienne.Williams -add @{ProxyAddresses="smtp:adrienne.williams.mail.onmicrosoft.com,SMTP:adrienne.williams.mail.onmicrosoft.com" -split ","}
With the above command, you can add as many addresses as you want, just separate each one with a comma.
How to Replace ProxyAddresses using PowerShell
You can use the -replace parameter to replace the user’s current ProxyAddress value.
Warning: Using the -replace parameter will replace all addresses with the values you provide.
Let’s list the user’s current addresses
get-aduser adrienne.williams -Properties ProxyAddresses | select Name, ProxyAddresses

So this user has two addresses listed. I’m going to pretend these addresses are wrong or no longer needed and replace them all.
Use this command to replace the ProxyAddresses.
Set-ADUser Adrienne.Williams -replace @{ProxyAddresses="SMTP:adrienne.williams.activedirectorypro.com"}
Now I’ll check the account.

You can see the -replace command cleared out both addresses and replaced it with the single address.
If you want to replace the value with multiple address use this command.
Set-ADUser Adrienne.Williams -replace @{ProxyAddresses="SMTP:adrienne.williams.activedirectorypro.com,SMTP:adrienne.williams.ad.com" -split ","}
How to Remove ProxyAddresses using PowerShell
You can use the -remove parameter to remove single or multiple addresses.
Remove single address.
Set-ADUser Adrienne.Williams -remove @{ProxyAddresses="SMTP:adrienne.williams.activedirectorypro.com"}
Remove multiple addresses.
Set-ADUser Adrienne.Williams -remove @{ProxyAddresses="SMTP:adrienne.williams.activedirectorypro.com,SMTP:adrienne.williams.ad.com" -split ","}
Bulk Add ProxyAddress for Multiple Accounts using PowerShell
To update multiple user accounts you will need to set up a CSV file with a samaccountname column and proxyaddresses column.
Enter as many proxyaddresses as you need and separate them by a comma.
Here is an example of a CSV file.

For this example, I’m going to update all the users in the Administrations organizational unit. To list all the users current addresses in an OU run the command below. You will need to change the value of the -SearchBase to the distinguished name of the OU.
get-aduser -filter * -SearchBase "OU=Administrations,OU=ADPRO Users,DC=ad,DC=activedirectorypro,DC=com" -Properties ProxyAddresses | select Name, ProxyAddresses

You can see two users have proxyaddresses and the rest do not.
To update these accounts with the information in the CSV file, use the command below. You will need to update the path to your CSV file.
Import-Csv "C:\it\bulk-proxy2.csv" | foreach {Set-ADUser -Identity $_.samaccountname -add @{Proxyaddresses=$_.Proxyaddresses -split ","}}
Now I’ll check the values if they have been updated.

Great!
It looks like all the accounts in the Administrations OU have been updated from the CSV file.
Summary
If you are using Azure AD connect or using Office 365 then knowing how to bulk update users ProxyAddresses attribute is a must. In this guide, I showed you multiple examples for updating single accounts, adding multiple addresses, and bulk updating a list of accounts from a CSV file
PowerShell is a great tool for making mass changes to Active Directory users but for those that want a GUI option, the AD Bulk User Update tool is a simple and easy solution.
Let me know in the comments below if you have any questions.
Related Articles
- How to bulk modify active directory user attributes
- Update Country Codes in Active Directory
- Bulk Reset user account passwords

Hi Robert,
This tutorial is only for on-premise, right?
Is there a way to remove an address in “ProxyAddresses” for the Azure AD PowerShell module? I have the feeling it is locked and only modified in license updates.
The user does not have a license (and therefore no mailbox) so the Exchange Online Powershell module is not an option.
I could just add a license to the user and then change the E-Mail aliases in the EAC but then it would still be billed after I revoke the license?
Yes, this tutorial is for on-premise.
This was very useful, i need to readdress many proxy addresses as part of an acquisition and using EAP is not going to work.
What i noticed was that i ended up with two Primary SMTP addresses, so need to figure a way to overwrite the original primary SMTP.
With the GUI tool, you can use the remove option to remove all the proxy addresses then add them back with only the addresses needed. I’ve had several customers use this method.
Hi guys
if you want to insert multiple addresses in proxyadresses field , I modified the code and the csv like this:
csv:
samaccountname&Proxyaddresses&Proxyaddresses2&Proxyaddresses3
use1r&smtp:user1_email@domain.com&SMTP:user2_email_primary_email@domain.com&smtp:anotheralias_email@domain.com
code:
Import-Csv “C:\temp\deploy.csv” -Delimiter “&” | foreach {Set-ADUser -Identity $_.samaccountname -add @{Proxyaddresses=$_.Proxyaddresses -split “&”}
Set-ADUser -Identity $_.samaccountname -add @{Proxyaddresses=$_.Proxyaddresses2 -split “&”}
Set-ADUser -Identity $_.samaccountname -add @{Proxyaddresses=$_.Proxyaddresses3 -split “&”}}
with this , the code enter for each user 3 times to put the diferents proxyaddresses..
I hope someone will find it useful!
Thanks for this cool manual, but i run into different issues…
the most i was able to solve but one is pretty hard…
if i have multiple smtp adrresses for example: smtp:user1@ms.com,user01@ms.com
it will only set the first e-mail address but not all the others….
any idea how i could fix this?
thanks and regards
Not sure if you got this figured out but I would say that the second one is a violation because it doesnt have a proxy type. In this example we user SMTP then we separate the Proxy type from the address. So you can have many others SIP, X500, SMTP etc. So change your code to be smtp:user1@ms.com,SMTP:user01@ms.com.
Hello,
I’ve find what is the issue with the error “Cannot validate argument on parameter ‘Identity’. The argument is null.”
you must create a CSV with the comma “,” separator not “;”
and then change the comma separator between each smtp address by another character instead of “,” in my case I’ve used the character “&”, and then the command worked well.
So here is the command line: Import-Csv “C:\it\bulk-proxy2.csv” | foreach {Set-ADUser -Identity $_.samaccountname -add @{Proxyaddresses=$_.Proxyaddresses -split “&”}}
Hello, it states that you can remove proxy addresses by adding the word remove. I’ve tried updating, but it doesn’t seem to remove the proxy addresses. Do you have the syntax?
Are you getting an error?
Here is the link to Microsofts documentation and syntax
https://docs.microsoft.com/en-us/powershell/module/addsadministration/set-aduser?view=win10-ps
If i run manual PS … \users.csv” | foreach {Set-ADUser -Identity $_.samaccountname -add @{ …
it is successful in adding the proxyaddresses from the csv
When i use the ADBulkUserUpdate tool it removes all existing addresses and puts the csv proxyaddresses as a single entry when i use the same csv
I’ve updated the tool to append the proxyaddresses instead of removing and putting only what’s in the CSV. If you need to remove values you can add the word remove to the csv.
Planning to do a bulk roll out of 300 users. Can I update the spreadsheet and add a “mail” attribute? The email address isn’t using the same UPN suffix as the login domain so I would like to add the emails that will be used.
Sure you can modify the script and spreadsheet to add whatever you need.
Purchased your tool, but it doesn’t work. I have created the CSV exactly like you propose, and the tool can read the attributes in the file – but when I run it, I’m just told that it cannot update the attributes.
Why?
Hi Michael,
I sent you an updated version. Try it out and let me know if you still have issues.
Hi Robert, Can I get the updated version of user export / bulk update ? I need to update proxyAddresses .
Yup, I sent you a link.
Hi Robert. Can you please send me the link as well?
Hi Jhon,
What link?
Bulk update using CSV file fails. It seems parameter ‘Identity’ is missing:
“Set-ADUser : Cannot validate argument on parameter ‘Identity’. The argument is null.”
Very useful article. Thank you!
Hi!
When I use the command:
Import-Csv “C:\Temp\users.csv” | foreach {Set-ADUser -Identity $_.samaccountname -add @{Proxyaddresses=$_.Proxyaddresses -split “,”}}
I got the following error:
Set-ADUser : Cannot validate argument on parameter ‘Identity’. The argument is null. Provide a valid value for the
argument, and then try running the command again.
At line:1 char:64
+ … \users.csv” | foreach {Set-ADUser -Identity $_.samaccountname -add @{ …
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Set-ADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADUser
The csv file is prepared in the same way you described above. What am I doing wrong?
Looks like I have a type in my CSV. Change the CSV header from samacountname to samaccountname.
I get the exact same error.
Try to add -delimiter paramenter in import-csv:
Import-Csv “C:\temp\proxy_update_test0.csv” –Delimiter “;” | foreach-object….
seems to solve problem
Cheers
Merlinweb
The above multiple is not working with either the script or GUI Tool, script adds the value “Microsoft.ActiveDirectory.Manamgement.ADPropertyValueCollection”, GUI Tool adds all values on the same line.
When did you download the GUI tool? I recently updated it to fix the issue of putting the values on the same line. If you log in you can download the latest version.