我試圖從Office 365 Exchange Online中並行提取數據以節省時間。我無法完成我期望做的事情,下面的代碼是我迄今爲止「最接近」的代碼。PowerShell工作流Exchange Remoting
Workflow Get-MailboxStatisticsParallel{
param ($o365cred)
$session = InlineScript {
New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $using:o365cred -Authentication Basic -AllowRedirection
}
InlineScript {
Invoke-Command -Session $session -ScriptBlock {Get-Mailbox "Firstname Middleinitial. Lastname"}
}
}
我定義了兩個內嵌腳本,因爲我想設置遠程會話一次,但然後並行調用Get-Mailbox命令來加快這一進程。這裏是我希望工作流看起來像的一個例子。
Workflow Get-MailboxStatisticsParallel{
param ($o365cred, $mailboxes)
$session = InlineScript {
New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $using:o365cred -Authentication Basic -AllowRedirection
}
ForEach -Parallel ($mailbox in $mailboxes){
InlineScript {
Invoke-Command -Session $using:session -ScriptBlock {param ($mailbox); Get-MailboxStatistics $mailbox.UserPrincipalName} -ArgumentList $mailbox
}
}
}
示例運行看起來像這樣。
$cred = Get-Credential
$mailboxes = Get-Mailbox -ResultSize Unlimited
Get-MailboxStatisticsParallel -o365cred $cred -mailboxes $mailboxes
下面是典型的結果。
Invoke-Command : Cannot validate argument on parameter 'Session'. The argument is null or empty. Supply an argument that is not null or empty and then try
the command again.
At Get-MailboxStatisticsParallel:7 char:7
+
+ CategoryInfo : InvalidData: (:) [Invoke-Command], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.InvokeCommandCommand
+ PSComputerName : [localhost]
我可以看到$ session對象正在反序列化,我猜這是我的問題。問題是如何建立一個具有特定Uri和ConfigurationName的遠程PowerShell會話,並利用工作流提供的功能?
我想你是對這個,我一直沒能找到一個解決辦法。這是我嘗試使用$ session變量時看到的。 Invoke-Command:無法綁定參數'Session'。無法將類型爲 「Deserialized.System.Management.Automation.Runspaces.PSSession」的「[PSSession] Session1」值轉換爲鍵入「System.Management.Automation.Runspaces.PSSession」。 –