Welcome to 365 Admin - Office 365 Administration for Beginners



Office 365 Administration can be overwhelming for a beginner. The preparation and configuration of your admin PC can be a challenge if you aren't aware of what you need to install to manage the cloud effectively. Plus it is important to be aware of limitations in your browser when you are administering multiple Office 365 tenants.

There are multitudes of technical blogs for the advanced Office 365 administrator, but nothing focused on beginners. It is for this reason I have created this blog, to guide Office 365 Administrators through all the challenges that beginners will face.

Everything you need to become a competent Office 365 Administrator is here, all in one place.

My mission in this technical blog is to provide tips, tutorials and scripts to the professional IT community, with particular focus on helping newcomers with little real world experience in Office 365.

In this blog, I will be publishing Tutorials to help you quickly create powerful scripts to manage your environment, whether it is 5 users or 500,000 users. These tutorials also cover MFA (Multi-Factor Authentication as well as Hybrid Office 365 environments.

This content will cater for various environments from small businesses with a cloud only presence to Enterprise hybrid environments managing hundreds of thousands of mailboxes.

I hope this blog helps on your journey into the world of Office 365.

Tutorials - by subject
*** Complete list of all my tutorials - Link
Hybrid Administration tutorials - Link
MFA (Multi-Factor Authentication) Tutorials -Link
Enterprise Management - Link

TechNet PowerShell Script Repository - (no support articles)
Microsoft TechNet Gallery Downloads - Link

PowerShell TechNet Downloads with support articles - 
All my PowerShell TechNet downloads and support articles - Link

Linked-In - Link

About Me - Link

Complete list of all my tutorials



Configure your Administration PC or Server
- How to configure your desktop PC for Office 365 Administration - including MFA - Link
- How to configure Server 2012 R2 for Office 365 Administration - including MFA - Link
- How to configure your desktop PC for Hybrid Exchange - Office 365 - Azure Administration - Link

Connection Tutorials
- How to connect to Office 365 and Azure via PowerShell - Link
- How to connect to Hybrid Exchange - Office 365 - Azure AD and Local AD via PowerShell - Link
- How to connect to Office 365 via PowerShell with MFA - Multi-Factor Authentication - Link

Connection Scripts - Download Links
Office 365 Connection Script with Modern Auth - Supports MFA (Multi-Factor Auth) - Link
Office 365 and Azure PowerShell Connection Script (No MFA support) - Link
Office 365 Hybrid, Azure and Local Active Directory PowerShell Connection Script - Link

All my TechNet Scripts and support articles - Link

Office 365 Migrations
How to configure Exchange 2013 - 2016 for Office 365 Hybrid - Link
How to update user UPNs to match the user's email address - Link

All Hybrid Administration Tutorials
- How to configure Exchange 2013 - 2016 for Office 365 Hybrid - Link
- How to configure your desktop PC for Hybrid Exchange - Office 365 - Azure Administration - Link
- How to connect to Hybrid Exchange - Office 365 - Azure AD and Local AD via PowerShell - Link
- Hybrid Management - Part 01 - Creating local User mailboxes - Link
- Hybrid Management - Part 02 - Creating local Exchange Shared Mailboxes - Link
- Hybrid Management - Part 03 - Creating local Exchange Room and Equipment Mailboxes - Link
- Hybrid Management - Part 04 - Configure the Hybrid Connection Wizard - Link
- Hybrid Management - Part 05 - Individual mailbox moves via the EAC - Link
- Hybrid Management - Part 06 - Bulk mailbox moves via the EAC - Link
- Hybrid Management - Part 07 - Moving bulk mailboxes with PowerShell - Link
- Hybrid Management - Part 08 - Creating Office 365 User Mailboxes via PowerShell - Link
- Hybrid Management - Part 09 - Creating Office 365 Shared Mailboxes via PowerShell - Link
- Hybrid Management - Part 10 - Creating Office 365 Room and Equipment Mailboxes via PowerShell - Link

All Modern Authentication and MFA (Multi-Factor Authentication) Tutorials
- All my MFA Tutorials on one page - Link
- How to configure your desktop PC for Office 365 Administration - including MFA - Link
- How to configure Server 2012 R2 for Office 365 Administration - including MFA - Link
- How to enable MFA (Multi-Factor Authentication) for Office 365 administrators - Link
- How to connect to Office 365 via PowerShell with MFA - Multi-Factor Authentication - Link
- How to protect your Office 365 MFA admin account from cell phone SIM hijacking - Link
- MFA Support - PowerShell modules and resources for Office 365  - Link

Documentation and Administration Scripts
- Exchange Online Configuration Documentation Script - Link
- Exchange Org documentation script for auditing and creating As Built docos - Link
- Mailbox Permission Pack for Exchange Online and Exchange On-Premises - Link
- Hybrid Office 365 Administration Pack - Including scripts and csv files - Link
- Scripts to update UPN to match the user's Primary SMTP email address - Link

Security
- How to protect your Office 365 MFA admin account from cell phone SIM hijacking - Link
- How the Outlook app on the PC helps protect you and your users from phishing emails - Link

Daily Administration and Reports 
How to create a basic document of the Exchange Online environment - Link
How to document the local Exchange Organization for As Built documents and auditing - Link
PowerShell scripts to report on Mailbox permissions in Exchange Online and Exchange On-Prem - Link

Enterprise Management
- How to manage Enterprise environments - Part 1 - Filtering queries - Link
- How to manage Enterprise environments - Part 2 - Creating scripts with a filtered query - Link
- How to manage Enterprise environments - Part 3 - Bulk management using multiple filters - Link

PowerShell scripting
- How to create basic PowerShell scripts - Link
- How to create basic PowerShell scripts with Export-CSV - Link
- How to create basic PowerShell scripts with Import-CSV - Link
- How to create PowerShell outputs to show all data without truncation - Link
- How to force PowerShell to display all the properties by default - Link
- How to force PowerShell to export multi-value properties when exporting to csv files - Link
- PowerShell modules and resources for Office 365 - Link

Downloads -
All my PowerShell TechNet Downloads - Link

Tips and Tricks -
How to use Chrome browser for concurrent multiple connections to different Office 365 tenancies- Link
General Tips and Tricks for better Office 365 Administration - Link
How to extend your Office 365 Trial - Link
How to get a 180 day trial tenant in Office 365 for testing - Link
PowerShell modules and resources for Office 365 - Link
How to update user UPNs to match the user's email address - Link
How the Outlook app on the PC helps protect you and your users from phishing emails - Link

Troubleshooting -
Hybrid Connection Wizard and Click to Run applications fail to download and run - Link

How to get a 180 day trial tenant in Office 365 for testing



30 day trials just aren't long enough, especially if you are testing a Hybrid configuration.

One of the biggest frustrations for Office 365 Administrators who are trying to learn this awesome technology, is that trial tenants expire after 30 days. This is annoying if you have a cloud only trial environment, but what if you are testing a Local - Hybrid Exchange environment that has taken weeks to configure. It is simply too much effort to create a new trial E3 tenant from scratch, remove your domain from the expired tenant, and then configure your new tenant with domains, users, data, and re-configuring the Hybrid Connection Wizard to continue after the initial 30 day trial.

----- What if I told you that you could get a 180 day free trial on Office 365 -----

Most people know that you can extend your existing Office 365 E3 trial for another 30 days, but did you know you can further extend your existing test environment by assigning an E5 trial, and then extending that? This would give you a total of 120 days testing. After that, you can then assign an Office 365 Business Premium  trial license and extend that as well, giving you a total of 180 days free testing.

By utilising the three Office 365 trials with Exchange Online and extending them, you will get a total of 180 days of free Exchange Online testing.

So how does this work in the real world?

My original 30 day E3 trial expired just over a month ago, and I extended it for another 30 days, using this process.
How to extend your Office 365 Trial - Link

The extended period has just expired as well. Rather than get all upset about having to recreate a new tenant and deprovision the old tenant, I started investigating to see if I was able to assign a trial E5 license to my about to expire (extended) E3 license. And it worked !!!

I am now in my third month of my Office 365 trial. I have spent countless hours over the last three months creating and configuring an Office 365 - Hybrid test environment, and it is re-assuring to know that I do not need deprovision my old tenant and create a new one to keep testing.

Follow the processes below to  create - extend your Office 365 tenant for a total of six months - 

--------------------------------------------------------------------------------------------

Sign up and create your tenant with an E3 license if you haven't already done it -

First thing we need to do is sign up for a standard Office 365 E3 trial. Browse to this web page -
Office 365 Enterprise E3 Trial - Link - And sign up for your E3 trial.
Fill in your personal details making sure that you enter your valid email and international mobile number.

At the Create your user ID page, select your username and tenant name. Note that your tenant name must be unique and cannot be changed once created.









Use your mobile for verification, and voila - You have just created a test tenant with an Office 365 E3 subscription.

Once you log into the Office 365 portal, go to Billing - Subscriptions -



.








You will see that you have an active Office 365 Enterprise E3 trial with 25 licenses available.











------------------------------------------------------------------------------

At the end of your 30 day trial (Enterprise E3) - Extend your trial
How to extend your Office 365 Trial - Link

------------------------------------------------------------------------------

At the end of trial extension - Add a new subscription for a different 30 day trial
- Note that you can actually mix Business Premium Trial and Enterprise E3 Trial
- In the steps below, I am adding an Enterprise E5 trial

To add a new subscription, click on - Add Subscriptions -






You will now be able to add extra subscriptions.

Under the Purchase Services - Enterprise Suite - Highlight Office 365 Enterprise E5 - Start Free Trial











Under Checkout - Confirm your order - Click 'Try Now'













Continue -

Assign your new licences to your existing users and you will extend the subscription by 30 days.

------------------------------------------------------------------------------

At the end of your second 30 day trial (Small Business Suite) - Extend your trial
How to extend your Office 365 Trial - Link

------------------------------------------------------------------------------

At the end of your second trial extension - Add a new subscription for a different 30 day trial
- Note that you can actually mix Business Premium Trial and Enterprise E3 Trial
- In the steps below, I am adding an Business Premium Trial

To add your new subscription, click on -
Billing - Subscriptions -












Add Subscriptions -






Under the Purchase Services - Scroll down to - Small Business Suite - Office 365 Business Premium
- Start Free Trial










Under Checkout - Confirm your order - Click 'Try Now'












Continue -

Assign your new licences to your existing users and you will extend the subscription by 30 days.

------------------------------------------------------------------------------------------

At the end of your third 30 day trial (Business Premium) - Extend your trial
How to extend your Office 365 Trial - Link

-------------------------------------------------------------------------------------------

In my testing I have confirmed that even though the Business Premium trial licenses are Exchange Plan 1 (against E3 and E5 trials being Exchange Plan 2), I had no issues with my Hybrid environment. You will however lose Exchange Plan 2 features when switching to Business Premium (eDiscovery, Litigation Hold etc), so ensure you do the Exchange Plan 2 testing before switching to the Business Premium trial licenses.

-------------------------------------------------------------------------------------------

Extra info -
Here are the direct links to all the available Office 365 Trials

Office 365 Enterprise E3 Trial - Link
Office 365 Enterprise E5 Trial - Link
Office 365 Business Premium Trial - Link

-------------------------------------------------------------------------------------------

Update - 15 May 2017 - Now extended to cover my sixth month
My fifth month of using the Office 365 trials with extensions has now finished. I have now confirmed I can extend my third trial to give me a full 180 day trial.

As the third trial was for an E5 license, I can extend the trial as before.

Under my Subscriptions you can see that the E5 trial has expired and is now in Reduced Functionality mode -










To extend the trial, I click on Billing - Purchase Services
Select the appropriate service (E5), Extend trial.












Select - Next







Select your credit card (no payment will be charged)

Extend trial -

Your trial will now be extended.






The Purchase Services page will update to show that the trial has been extended with a new expiry date.











-------------------------------------------------------------------------------------------

Congratulations !!!
You have now extended your Office 365 trial for the full 180 days.

-------------------------------------------------------------------------------------------

Check out a list of ALL of my tutorials here - Link

How the Outlook app on the PC helps protect you and your users from phishing emails



One of the greatest benefits of the Outlook app on PCs is that it helps protect you and your users from phishing attempts and scams.

There is actually a huge difference with viewing emails via the Outlook app on PC compared to viewing emails via the OWA web based email portal.

I recently received an email that at first glance looks quite legit when viewing in OWA.
No obvious grammar or spelling mistakes, the same or similar wording to emails that you would receive from Microsoft, as well as the same format and images you would receive from Microsoft with them warning of an 'Unusual Sign-in Attempt On Your Microsoft Office365'.










The hyperlinks look realistic until you hover your mouse to see the URL.
The URL preview shows a link that is definitely not related to Microsoft, but many users may still be tempted to click the link and report the 'unusual sign-in attempt'.





Although Microsoft did flag this as spam and send it to my Junk Email folder, many users could potentially click the link and unknowingly submit their Office 365 credentials, leading to potential credential and data theft.

----------------------------------------------------------------------------------

The same email when viewed in the Outlook app on PC is displayed differently and is less convincing when viewed by end-users. The Outlook app automatically converts messages in the Junk Email folder into plain text format. This shows the underlying hyperlink URL and removes the very convincing images making it easier for users to identify that this is a phishing scam.

The Outlook app even disables the links to protect the end users. The end user has to manually move the message out of the Junk Email folder to enable the links.





As you can see, the Outlook app for PC will help protect your end users from potential data theft by making it easier to identify phishing emails.


Please feel free to share this post with your organisation to educate end users and reduce the potential of credential theft, data loss and even identity theft.

----------------------------------------------------------------------------------

As an added note as part of writing this article, I submitted the email headers to the Message Analyzer section of the Microsoft Remote Connectivity Analyzer site. As you can see below, the headers expose the original sender was from mail.uj.edu.pl - which is the mail server for a University in Poland.




----------------------------------------------------------------------------------

Check out a list of ALL of my tutorials here - Link




How to force PowerShell to export multi-value properties when exporting to csv files


Welcome to the third post of my series on how to get more results from PowerShell.

- How to force PowerShell to export multi-value properties when exporting to csv files

This tutorial will show you how to force PowerShell to export multi-value properties when exporting to csv files. By default, the export of multi-value properties will fail when being exported to csv.
This will happen even if the multi-valued property only has a single value.

================================================================

All tutorials in this series -
- How to create PowerShell outputs to show all data without truncation - Link
- How to force PowerShell to display all the properties by default - Link
- How to force PowerShell to export multi-value properties when exporting to csv files - Link

Related PowerShell Tutorials
- How to create basic PowerShell scripts - Link
- How to create basic PowerShell scripts with Export-CSV - Link
- How to create basic PowerShell scripts with Import-CSV - Link

================================================================

When you start creating PowerShell reports, you will quickly see that there are many different ways to output your results or queries. In many circumstances you will need to export your reports to csv files, for example when creating reports on users or mailboxes in your Organization.

Unfortunately many user and mailbox properties have multiple values that are not easily captured and exported to csv when using a standard export script that may work in most circumstances (where the properties you choose to export are a single valued property).

In a previous article, you saw that PowerShell would sometimes fail when exporting all the data, in particular when exporting properties with multiple values. As you can see below, when trying to export properties that are multi-valued with Get-AdUser - some properties failed to export correctly.

Local Active Directory query export to CSV.
Get-AdUser user02 -Properties * |
Select DisplayName,
MemberOf,
ProxyAddresses |
Export-csv -NoTypeInformation c:\scripts\User02-AD-Details.csv


Below you can see that the property - MemberOf - is a multi-valued property and fails and exports the value as - Microsoft.ActiveDirectory.Management.ADPropertyValueCollection -



As well as Local Active Directory, the export will also fail for some properties when using Azure AD v1 - MSOL cmdlets.
For example, running the script below to export some basic details on an Office 365 user account using the cmdlet Get-MsolUser will work perfectly as all the properties I have selected only have a single value.

Get-MsolUser -UserPrincipalName user01@teamterry365.com |
Select SignInName,DisplayName |
export-csv -NoTypeInformation c:\scripts\User01-Details.csv






However, if I edit the script to include exporting all email addresses, the export fails to export the multiple values for the property - ProxyAddresses.

Get-MsolUser -UserPrincipalName user01@teamterry365.com | 
Select SignInName,
DisplayName,
ProxyAddresses | 
export-csv -NoTypeInformation c:\scripts\User01-Details.csv

As you can see below, the ProxyAddresses property fails to show all values and instead exports - 
System.Collections.Generic.List`1[System.String]







Exchange will also fail on properties with multiple values.

For example, I have received many different errors on a simple Get-Mailbox export from my local Exchange Org -

I ran the cmdlet below to export some selected properties for a local mailbox - user02
Get-Mailbox user02 |
Select DisplayName,
GrantSendOnBehalfTo,
EmailAddresses,
ProtocolSettings,
AuditDelegate |
Export-csv -NoTypeInformation c:\scripts\User02-Details.csv

The csv file had errors when reporting multiple values.

GrantSendOnBehalfTo
Microsoft.Exchange.Data.Directory.ADMultiValuedProperty`1
[Microsoft.Exchange.Data.Directory.ADObjectId]




EmailAddresses
Microsoft.Exchange.Data.ProxyAddressCollection


ProtocolSettings
Microsoft.Exchange.Data.MultiValuedProperty`1[System.String]




AuditDelegate
Microsoft.Exchange.Data.Directory.ADMultiValuedProperty`1[Microsoft.Exchange.Data.
Directory.MailboxAuditOperations]






Note the pattern with some of them starting with one of the following values -
- Microsoft.Exchange.Data.MultiValuedProperty`1
- Microsoft.Exchange.Data.Directory.ADMultiValuedProperty`1

There are many more variations of these errors, but the MultiValuedProperty errors can all be resolved the same way. The same solution applies in this instance to the Exchange output error -
Microsoft.Exchange.Data.ProxyAddressCollection.


=========================================================

Resolution

We can force PowerShell to output all the values of a multi-valued property with the Join function before exporting it.
This works for all the previous and following examples in local Active Directory, Exchange and Azure Active Directory.

Local Active Directory
Microsoft.ActiveDirectory.Management.ADPropertyValueCollection

Azure Active Directory - MSOL
System.Collections.Generic.List`1[System.String]

Exchange -
Microsoft.Exchange.Data.Directory.ADMultiValuedProperty`1[Microsoft.Exchange.Data.Directory.ADObjectId]
Microsoft.Exchange.Data.ProxyAddressCollection
Microsoft.Exchange.Data.MultiValuedProperty`1[System.String]
Microsoft.Exchange.Data.Directory.ADMultiValuedProperty`1[Microsoft.Exchange.Data.Directory.MailboxAuditOperations]

Use this as a template for updating your scripts that fail

@{name="GrantSendOnBehalfTo";expression={$_.GrantSendOnBehalfTo -join ";"}}

Simply replace the property in your script that you have selected with the Join function above.
Just update the line above with the correct Property (in red).

Read on for a more detailed explanation and some examples

------------------------------------------------------------------------------------------

Error - Local Active Directory
Microsoft.ActiveDirectory.Management.ADPropertyValueCollection

The script below was used to export the values of three properties for a local AD user.
The second and third property - MemberOf and ProxyAddresses, are multi-valued properties and will fail to export these values by default.

Get-AdUser user02 -Properties * |
Select DisplayName,
MemberOf,
ProxyAddresses |
Export-csv -NoTypeInformation c:\scripts\User02-AD-Details.csv

As you can see below, both the MemberOf property and the ProxyAddresses property fail to show all values and instead they both export - 
Microsoft.ActiveDirectory.Management.ADPropertyValueCollection

MemberOf





ProxyAddresses





To resolve this issue, we can edit the script to join the multiple values in the MemberOf property before exporting.

Use the 'template' below -
@{name="GrantSendOnBehalfTo";expression={$_.GrantSendOnBehalfTo -join ";"}}

- Be careful not to change anything else in the script, like the pipe symbol or commas.
-----------

Line 3 of the script - the property - MemberOf  -
Has been replaced with
@{name="MemberOf";expression={$_.MemberOf -join ";"}}

Old Script -
Get-AdUser user02 -Properties * |
Select DisplayName,
MemberOf,
ProxyAddresses |
Export-csv -NoTypeInformation c:\scripts\User02-AD-Details.csv

New Script -
Get-AdUser user02 -Properties * |
Select DisplayName,
@{name="MemberOf";expression={$_.MemberOf -join ";"}},
ProxyAddresses |
Export-csv -NoTypeInformation c:\scripts\User02-AD-Details.csv




This resolves the issue and the script will now export the multiple values for the Property - MemberOf - to the csv file.







Next we update Line 4 with the same 'template' and update with the property as before.
This time we are replacing the property - ProxyAddresses -

Final Script -
Get-AdUser user02 -Properties * |
Select DisplayName,
@{name="MemberOf";expression={$_.MemberOf -join ";"}},
@{name="ProxyAddresses";expression={$_.ProxyAddresses -join ";"}} |
Export-csv -NoTypeInformation c:\scripts\User02-AD-Details.csv








This resolves the issue and the script will now export both of the multiple values for the Property - MemberOf and ProxyAddresses - to the csv file.











------------------------------------------------------------------------------------------


Error - Azure Active Directory - MSOL
System.Collections.Generic.List`1[System.String]

The script below was used to export the values of three properties for an MSOL user.
The third property - ProxyAddresses, has multiple values and will fail to export these values by default.

Get-MsolUser -UserPrincipalName user01@teamterry365.com | 
Select SignInName,
DisplayName,
ProxyAddresses | 
export-csv -NoTypeInformation c:\scripts\User01-Details.csv










As you can see below, the ProxyAddresses property fails to show all values and instead exports - 
System.Collections.Generic.List`1[System.String]






To resolve this issue, we can edit the script to join the multiple values in the ProxyAddresses property before exporting.

Once again, use the 'template' below -
@{name="GrantSendOnBehalfTo";expression={$_.GrantSendOnBehalfTo -join ";"}}

Line 4 of the script - the property - ProxyAddresses -
Has been replaced with
@{name="ProxyAddresses";expression={$_.ProxyAddresses -join ";"}}

Old Script -
Get-MsolUser -UserPrincipalName user01@teamterry365.com |
Select SignInName,
DisplayName,
ProxyAddresses |
export-csv -NoTypeInformation c:\scripts\User01-Details.csv

New Script -
Get-MsolUser -UserPrincipalName user01@teamterry365.com |
Select SignInName,
DisplayName,
@{name="ProxyAddresses";expression={$_.ProxyAddresses -join ";"}} |
export-csv -NoTypeInformation c:\scripts\User01-Details.csv



This resolves the issue and the script will now export the multiple values to the csv file.

The same process can be applied to resolve issues with Exchange local not exporting multiple values to CSV.

-------------------------------------------------------------------------------------------------------------

Error - Exchange issue exporting multiple value properties.

I ran the cmdlet below to export some selected properties for a local mailbox - user02
Get-Mailbox user02 |
Select DisplayName,
GrantSendOnBehalfTo,
EmailAddresses,
ProtocolSettings,
AuditDelegate |
Export-csv -NoTypeInformation c:\scripts\User02-Details.csv

As you can see in the screen shot below, the csv file shows incorrect data for properties with multiple values.



So let's try updating these one at a time to see the results.


Here is the script in PowerShell ISE so it is easier to read and understand the changes.
I have used Enter after each of the properties that are selected, and this script will work in ISE if the Exchange PowerShell snap-in is loaded.

As before, the script will fail to export the information correctly, giving the results below.





Just like in the previous examples, we can join all the values of a multi-valued property with the Join function before exporting it.

Once again, use the 'template' below -
@{name="GrantSendOnBehalfTo";expression={$_.GrantSendOnBehalfTo -join ";"}}

In the script below, I have updated the line GrantSendOnBehalfTo to use the join function.

Line 3 of the script - the property - GrantSendOnBehalfTo -
Has been replaced with
@{Name=’GrantSendOnBehalfTo’;Expression={[string]::join(";", ($_.GrantSendOnBehalfTo))}}
Note that the comma is still at the end of the line.


The updated script has successfully exported the properties for the GrantSendOnBehalfTo (which is a multi-value property) -




Now I will update all of the properties that are multi-valued properties and have failed in the original script.
Get-Mailbox user02 |
Select DisplayName,
@{name="GrantSendOnBehalfTo";expression={$_.GrantSendOnBehalfTo -join ";"}},
@{name="EmailAddresses";expression={$_.EmailAddresses -join ";"}},
@{name="ProtocolSettings";expression={$_.ProtocolSettings -join ";"}},
@{name="AuditDelegate";expression={$_.AuditDelegate -join ";"}} |
Export-csv -NoTypeInformation c:\scripts\User02-Details.csv





As you can see below, the script now exports all the multi-valued properties correctly.

GrantSendOnBehalfTo


EmailAddresses








ProtocolSettings
AuditDelegate






===================================================================

- Notes -

I found the 'template' below to work fine with MSOL Azure Active Directory and Exchange, but failed with Local Active Directory on Server 2016.
I have NOT tested this on earlier versions of Windows Server, but my research for this article had this format as the original resolution

@{Name=’ProxyAddresses’;Expression={[string]::join(";", ($_.ProxyAddresses))}}

-------------------------------------------------------------------------------------------


Congratulations !!!
You now know how to force PowerShell to export multi-value properties when exporting to csv files

-------------------------------------------------------------------------------------------

Check out a list of ALL of my tutorials here - Link