使此脚本并行运行以加快执行速度的最佳方法是什么?

问题描述

代码用于从嵌套组中获取所有用户。我希望它并行运行以加快运行时间。什么是最好的方法?我试图在我的最后一个函数的 foreach 上并行运行整个代码,但我无法在并行内部调用函数。预先感谢已经遇到此逻辑的任何人。

function Get-CachedADUSER($AduserCached){
    # $AduserCached = $resultHOlder
    $cachedResults = Get-Variable -Scope Global -Name $AduserCached  -ErrorAction SilentlyContinue
    if($null -ne $cachedResults){
     $existing = write-host "Check: i found existing"
     return $cachedResults.value,$existing
    }
    else{
     $searching = write-host "Check: Searching"
     $results = get-aduser $AduserCached -properties enabled,displayname,EmployeeNumber,LastlogonDate,PasswordLastSet
     Set-CachedADUSER -setAduserCached $AduserCached -value $results
     
     return $results.value,$searching
    }
 }

 Function Set-CachedADUSER($setAduserCached,$value){
    Set-Variable -Scope Global -Name $setAduserCached -Value $value
    return $value
}
  function Get-ADUsers_cachedV2 { 
    param ( 
        [Parameter(ValuefromPipeline = $true,mandatory = $true)][String] $GroupName
    ) 
    [int]$circular = $null

    # result holder
    $resultHolder = @()
        $table = $null 
        $nestedmembers = $null 
        $adgroupname = $null     

        # get members of the group and member of
        $ADGroupname = get-adgroup $groupname -properties memberof,members

        # $ADGroupname = Get-CachedGroupMembership -GroupName $groupName -properties memberof,members

        # list all members as list (no headers) and save to var
        $memberof = $adgroupname | select -expand memberof 
       
        if ($adgroupname) {  
            if ($circular) { 
                $nestedMembers = Get-ADGroupMember -Identity $GroupName -recursive 
                $circular = $null 
            } 
            else { 
                $nestedMembers = Get-ADGroupMember -Identity $GroupName | sort objectclass -Descending
                # if get adgroupmember returns nothing,it uses the members for ordinary getADGroup
                if (!($nestedmembers)) {
                    $unkNown = $ADGroupname |select -expand members
                    if ($unkNown) {
                        $nestedmembers = @()
                        foreach ($member in $unkNown) {
                            $nestedmembers += get-adobject $member #-ErrorAction SilentlyContinue
                        }
                    }
                }
            } 
            # loops through each member
            ForEach($nestedmember in $nestedmembers){ 
                # creates the properties into a custom object. 
                $Props = @{
                    Type            = $nestedmember.objectclass;
                    Name            = $nestedmember.name;
                    displayName     = "";
                    ParentGroup     = $ADgroupname.name;
                    # ParentGroup     = $ADgroupname.name;
                    Enabled         = "";
                    # nesting         = $nesting;
                    # DN              = $nestedmember.distinguishedname;
                    # Comment         = ""
                    EmployeeNumber  = "";
                    LastlogonDate   = "";
                    PasswordLastSet = "";
                } 
                # if member object is a user
                if ($nestedmember.objectclass -eq "user") { 
                    # saves all the properties in the table. 
                    $nestedADMember = Get-CachedADUSER -AduserCached $nestedmember.Name  -properties enabled,PasswordLastSet
                    $table = new-object psobject -property $props 
                    $table.enabled = $nestedadmember.enabled
                    $table.name = $nestedadmember.samaccountname
                    $table.displayname = $nestedadmember.displayname
                    $table.EmployeeNumber = $nestedadmember.EmployeeNumber
                    $table.LastlogonDate = $nestedadmember.LastlogonDate
                    $table.PasswordLastSet = $nestedadmember.PasswordLastSet

                    #save all in 1 storage
                    $resultHOlder += $table | select type,name,parentgroup,enabled,PasswordLastSet
                } 


                # if member object is group
                elseif ($nestedmember.objectclass -eq "group") {  
                    $table = new-object psobject -Property $props 
                    # if circular,meaning the groups member of list contains one of its members. 
                    # e.g. if group 2 is a member of group 1 and group 1 is a member of grou 2
                    if ($memberof -contains $nestedmember.distinguishedname) { 
                        $table.comment = "Circular membership" 
                        $circular = 1 
                    } 
                    # for circular output
                    #$table | select type,nesting,dn,comment 
                    #calling function itself
                    $resultHOlder += Get-ADUsers_cachedV2 -GroupName $nestedmember.distinguishedname                             
                } 
                else { 
                    if ($nestedmember) {
                        $table = new-object psobject -property $props
                        $resultHolder += $table | select type,PasswordLastSet
                    }
                } 
            } 
        } 
    return   $resultHOlder

}

++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++ 这就是我想要并行以加快执行速度

function Get-nestedGroupUsers_cachedV2 {
    param ( 
        [Parameter(Mandatory = $true)][String]$FileName,[Parameter(Mandatory = $true)][String]$searchFilePath
    )
    $storageHolder = @()
    $groupList = Get-Content $searchFilePath 
    $groupList |  ForEach-Object { 
        $allusers = Get-ADUsers_cachedV2 -GroupName $_
        $storageHolder += $allusers  
       
    }
    $storageHolder | select ParentGroup,Name,Enabled,PasswordLastSet |Export-Csv -Path "C:\Users\***\****\$FileName.csv" -NoTypeinformation #-Force
} 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...