gpt4 book ai didi

PowerShell 工作流交换远程处理

转载 作者:行者123 更新时间:2023-12-04 00:55:16 24 4
gpt4 key购买 nike

我正在尝试从 Office 365 Exchange Online 并行提取数据以节省时间。我无法完成我想要做的事情,以下代码是我迄今为止“最接近”的代码。

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"}
}
}

我定义了两个内联脚本,因为我想设置一次远程 session ,然后并行调用 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 并利用工作流提供的功能?

最佳答案

我试图使这项工作,但还没有找到办法。

看看Running Windows PowerShell Commands in a Workflow ,它说,“要在远程计算机上运行 inlinescript 事件中的命令,您需要从 inlinescript 块内建立和管理到远程计算机的连接,然后远程运行命令。”

假设我正确理解了该语句,我认为您不能在 InlineScript 块之外建立 session ,然后在块内使用它。我尝试了几种尝试将 $session 传递到 InlineScript 的方法,但它始终为 $null。这个限制对我来说很有意义,因为我看不到工作流如何使用一个远程 session 或连接在远程服务器上同时执行多个命令。我认为您将需要多个远程连接来执行多个远程命令。

我的猜测是,您最好建立一系列到 Office 365 的连接,然后使用作业通过每个 session 并行执行命令。

关于PowerShell 工作流交换远程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17178404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com