小编pso*_*ott的帖子

并行化Active Directory查询

我想从所有域控制器的所有Active Directory用户获取所有lastlogon日期.这将生成包含所有用户及其最新登录日期的列表.我的脚本工作正常,但是可以将它更多地并行化吗?

目前,只需一个用户查询所有20个域控制器大约需要1秒钟(Invoke-Parallel正在帮助很多).

这里的问题是我们有~120k用户

这是代码:

. 'D:\scripts\InPa\Invoke-Parallel-lite-nolog.ps1'

function Get-UsersLastLogon{
    $AllDCs = ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().domainControllers).Name
    $AllUser = ((New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User))")).FindAll().Properties).samaccountname

    foreach($SamAccountName in $AllUser){
        $Latest = $AllDCs | Invoke-Parallel -Throttle 60 -ScriptBlock {
        $de=[adsi]"LDAP://$_"
        $UserSeacher = (New-Object System.DirectoryServices.DirectorySearcher($de,"(&(objectCategory=User)(samaccountname=$Using:SamAccountName))")).FindAll().Properties

        $co = New-Object System.Object
        $co | Add-Member -type NoteProperty -name SamAccountName -value $Using:SamAccountName
        $co | Add-Member -type NoteProperty -name lastlogon -value ([datetime]::FromFileTime([string]$UserSeacher.lastlogon))
        $co

        }
        $Latest | Sort-Object -Property lastlogon -Descending | Select-Object -First 1
    }
}

Get-UsersLastLogon | Export-Csv -Path D:\UsersLastLogon.csv -Delimiter ';' -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

你有想法加快这个速度吗?

powershell active-directory

3
推荐指数
1
解决办法
139
查看次数

标签 统计

active-directory ×1

powershell ×1