pmtelstra nothing is being returned by powershell_2.Invoke(); because you have added your commands to a different session object (session), and just left it hanging in the air. Try;
powershell_2.Runspace = Runspace;
powershell_2.AddCommand($"Connect-ExchangeOnline -ConnectionUri {strRemoteComputerUri} -ProxyAccessType {proxyType} -CertificateThumbPrint {certId} -AppID {appId} -Organization {org}");
powershell_2.AddScript("get-mailbox -identity xyz | Out-String");
Collection<PSObject> output = powershell_2.Invoke();
Personally I do something like this....
using (PowerShell session = PowerShell.Create())
{
// 3. And finally attached the Runspace to the Session, so that EXO cmdlets are supported
//Runspace.Open();
session.Runspace = Runspace;
// Inject the scriptlet that needs to be executed between connecting and disconnecting to Exchange Online
string script =
($"Connect-ExchangeOnline -CommandName 'Get-Mailbox','Set-Mailbox' -CertificateThumbprint {Config.Azure.CertID} -AppID {Config.Azure.AppID} -Organization {Config.Azure.Organisation};" +
psScriptlet + ";Disconnect-ExchangeOnline -Confirm:$false");
// Add the script
session.AddScript(script);
// Invoke the script
Collection<PSObject> psOutput = session.Invoke();
etc...
where psScriptlet might be a command like $"Get-Mailbox '{MailboxOwner.UPN}' | Format-List DeliverToMailboxAndForward, ForwardingAddress | Out-String". Note in my posts above I always get an error if I try using the new cmdlet Get-EXOMailbox