运行空间池中的Powershell内存使用情况

运行空间池中的Powershell内存使用情况,powershell,runspace,Powershell,Runspace,我对代码有问题: Measure-Command{ $controller=Get-ADDomainController -Filter *| Select -ExpandProperty Hostname $users=Get-ADUser -Filter * |select samaccountname $scriptblock={ param($samacc,$controller) $result=@() foreach($cont in $control

我对代码有问题:

 Measure-Command{ $controller=Get-ADDomainController -Filter *| Select -ExpandProperty Hostname   
$users=Get-ADUser -Filter * |select samaccountname
$scriptblock={
    param($samacc,$controller)
    $result=@()
    foreach($cont in $controller){
    $RESULT=$result + (Get-ADUser -Server $cont -Identity $samacc -Properties lastlogon,whenchanged,displayname,title,company  | sort-object lastLogon -descending | select-object enabled,displayname,samaccountname,title,company, @{Name="lastLogon";Expression={[datetime]::FromFileTime($_.'lastLogon')}},whenchanged)
    }
    $result|Sort-Object -Descending -Property LastLogon|select -First 1
    }

$MaxThreads = 5
$RunspacePool = [runspacefactory]::CreateRunspacePool(1, $MaxThreads)
$RunspacePool.ApartmentState = "MTA"
$job=@()
$RunspacePool.open()
    foreach($user in $users){
    $PowerShell = [powershell]::Create().AddScript($scriptblock).AddArgument($user.samaccountname).AddArgument($controller)
    $PowerShell.RunspacePool = $RunspacePool
    $job+=[PSCustomObject]@{
        Id = $_
        Pipe = $PowerShell
        Handle = $PowerShell.BeginInvoke()
        Object = $Object
     }
    }
    while ($job.Handle -ne $null){
    $Completed = $job | Where-Object { $_.Handle.IsCompleted -eq $true }
        foreach ($Runspace in $Completed){
        $data=$Runspace.Pipe.EndInvoke($Runspace.Handle)
        $data|Export-Csv d:\fulllist.csv -Append -Delimiter ';' -Encoding UTF8 -NoTypeInformation
        $Runspace.Handle = $null       
        }
    Start-Sleep -Milliseconds 100
    }
    $PowerShell.Dispose()      
    $RunspacePool.Dispose()
    Remove-Variable controller,users,scriptblock,job,Completed,data,Runspace,RunspacePool,PowerShell
    [System.GC]::Collect()  
    }

我使用powershell命令为每个用户创建实例,并将其抛出到runspacepool。但我有大约35000个用户,当我达到18000个用户时,连接\会话开始出现问题。结果表只获取22000个用户的数据。Powershell则不会释放内存。如何正确管理关闭实例以释放内存(对于已经写入文件的用户)。可能是我对命令使用了错误的位置或错误的命令。

您是否尝试过在powershell 7中启动threadjob或foreach对象-并行?不,我需要使用powershell V5您可以从powershell gallery for powershell 5获取threadjobs。但这并不能决定我在运行空间池中的问题,我想通过runspacepool解决此问题您是否尝试过在powershell 7中启动threadjob或foreach对象-并行?不,我需要使用powershell V5您可以从powershell gallery for powershell 5获取threadjobs。但这并不能解决我在运行空间池中的问题,我想通过runspacepool解决此问题