Exchange management shell is just powershell that's loaded with the Microsoft.exchange module/configuration. You can use powershell to tap into exchange by using the commands in the below link;
https://docs.microsoft.com/en-us/powershell/exchange/exchange-eop/connect-to-exchange-online-protection-powershell?view=exchange-ps
I use this frequently when I don't need to go into the mail server but you have to ensure that PSRemoting is enabled and there are a few other prerequisites that need to be setup detailed in the link. You might have to switch authentication method depending on how your AD authentication is setup (Kerberos/basic is most common)
Other than this, you can export a list from exchange in the Recipient configuration -> mailbox section and on the right-hand pane there is an export list function. This exports the display name, OU, mailbox type, email address etc. and then you should be able to format this in a way you'd like it, but it's not as granular as the powershell method where you can specify exactly what you want exporting.
Also, if you can define a logic for the users email address, you could just use a powershell script to import the email addresses into AD if it follows a consistent format of for example, [email protected], so no need to even touch the mail server in this method. If this is the case, you would need to use a ForEach-object import and then query AD to pull each first name, surname and then concatenate these strings into an import function to show
"$Firstname, $Surname"@company.co.uk which will loop through each user and apply the e-mail address using the Set-ADUser cmdlet.