如何在o365 cmdlet中使用SplitPipeline

时间:2019-07-05 11:26:21

标签: powershell office365

我一直在尝试检查邮箱中的特定用户列表(大约14000个用户),因为可能已经创建了恶意规则。

我创建了一个非常简单的PowerShell脚本来实现该目标,但是显然要花12个多小时才能完成。我发现了一个多线程选项来处理所有这些数据:SplitPipeline,但我什至不知道如何开始。

在安装和导入模块并登录到O365之后,我正在尝试这样做(请注意,我不是刚刚进入这个Powershell世界,我不是专家):

$file = Get-Content  userlist.txt
$outputFile = "outputFile.txt"

$data = @{
    Count = $file.Count
    Done = 0
    }

$file | Split-Pipeline -Count 10 -Variable data {process{
[System.Threading.Monitor]::Enter($data)
try 
{
    $done = ++$data.Done
}
finally 
{
    [System.Threading.Monitor]::Exit($data)
}
Write-Progress -Activity "Done $done" -Status Processing -PercentComplete (100*$done/$data.Count)

$User2Check = $_
Write-Host "Checking $User2Check"

get-mailbox $User2Check | Select identity


}} | Set-Content $outputFile

结果是典型的消息:术语“ get-mailbox”未被识别为cmdlet的名称,就像SplitPipeline不知道我已针对O365登录一样。

您有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您必须了解Split-Pipeline的工作原理,它在自己的工作区中运行。不幸的是,人们不能在分割管道运行空间之外调用/使用指定的函数和变量。您可以使用Split-pipeline提供的-Variable -Function开关,但是请记住,在使用函数的情况下,您要调用的xyz函数使用的任何全局变量都看不到该全局变量。

在室内情况下,由于Split-pipe不知道get-mailbox为空,因此您必须包括该模型并创建一个新的Office连接,以使get-mailbox cmdlet正常工作。