Exchange 在线会话和运行空间

Exchange Online Session and Runspace

我需要在运行空间中执行 Get-MailboxStatistics。 我可以在线连接到 Exchange。如果我执行 'Get-Pssession' 我可以看到 Exchange 会话。但是我如何将此 ExchangeOnline 会话传递给运行空间以执行 Get-MailboxStatistics。 目前它无法识别运行空间中的 Get-MailboxStatistics 命令。

这是我的代码(这是一个更大的脚本的一部分):

# Connecting to Exchange Online
$AdminName = "hil119"
$Pass = "password"
$cred_cloud = new-object -typename System.Management.Automation.PSCredential -argumentlist $AdminName, $Pass
Connect-ExchangeOnline -Credential $cred_cloud -Prefix Cloud

# Executing Get-MailboxStatistics in a Runspace
$Runspace = [runspacefactory]::CreateRunspace()
$PowerShell = [powershell]::Create()
$PowerShell.runspace = $Runspace
$Runspace.Open()
[void]$PowerShell.AddScript({Get-MailboxStatistics 'd94589'})
$PowerShell.BeginInvoke()

经过几天的研究,我发现您可以 运行 本地系统或远程 Exchange 服务器上的线程。 如果你 运行 它在本地系统上,那么每个线程都需要自己调用 Exchange 会话,但是如果你 运行 它在远程交换系统(onprem 或云)上,你可以获得交换会话只需一次并将该会话传递给线程。您可以使用 Invoke 命令获取远程会话。 此外,我最终还是在 Poshjobs 或 运行spaces 中编写了脚本。最终,根据我的阅读,Poshjobs 是 Start-job 和 运行spaces.

的组合

下面是用于 运行 远程服务器上线程的代码片段。使用此脚本,您可以将相同的交换会话传递给所有线程。

Function Func_ConnectCloud
{
$AdminName = "r43667"
$AdminPassSecure = "pass"
$Cred_Cloud = new-object -typename System.Management.Automation.PSCredential -argumentlist $AdminName, $AdminPassSecure
Connect-ExchangeOnline -Credential $Cred_Cloud
$CloudSession =  Get-PSSession | Where { $_.ComputerName -like "outlook.office365*"}
Return $CloudSession
}

$script_Remote = 
    {
param(
     $Alias,
     $CloudSession
     )

Invoke-Command -session $CloudSession -ArgumentList $Alias  -ScriptBlock {param($Alias); Get-MailboxStatistics $Alias}
    }

$CloudSession = Func_ConnectCloud
$Alias = 'h672892'
$Job1 = Start-RsJob -Name "job_$Alias" -ScriptBlock $ScriptRemote -ArgumentList $Alias, $CloudSession

Receive-RsJob $Job1
Remove-RsJob $Job1

您可以将此脚本用于 运行 本地和云线程,尽管当 运行 在云服务器上时,Microsoft 将只允许两个线程。如果您 运行 多于两个线程,您的 Exchange 会话将被终止(这与限制不同)。因此,如果您有云环境,那么最好在本地 运行 您的线程。 在 https://powershell.org/forums/topic/connecting-to-office-365-in-psjobs/

处特别参考了@postanote 的脚本