i need to speedup this script.. it has a RunTime more than 4 days in our enviroment does someone has an Idea ? and of course to replace the Quest Stuff.. unfortunally i was not so successfull with using ADFind which is very fast for Query AD stuff
- ForEach ($which in $DC)
- {
- if (($i % 200) -eq 0)
- {
- [System.GC]::Collect()
- }
- Connect-QADService -Service $which |Out-Null
- $DomName = ($which | Select-Object -unique -First 2).Split(".")[1]
- # $path = "d:\reports\KPIReports\KPI OUAdmins $DomName $((Get-Date).ToString('yyyy.MM.dd-HH.mm')).csv"
- $path = "d:\reports\KPIReports\KPI OUAdmins $DomName.csv"
- Write-output "KPI OUAdmins $DomName has started at $((Get-Date).ToString('yyyy.MM.dd-HH.mm'))"
- $Domain = ($which | Select-Object -First 2).Split(".")[1]+ ".contiwan.com"
- $Domain_Manfred = ($which | Select-Object -First 2).Split(".")[1]
- $Domain_Manfred
- $Admins = Get-QADGroup -SearchRoot "$Domain/groups" | Where-Object {$_.Name -match 'Administrative Users'}
- $AllOuAdmins = Get-QADGroup -SearchRoot "$Domain/groups" | Where-Object {$_.Name -match 'All-OU-Administrators'}
- $FRs = Get-QADGroup -SearchRoot "$Domain/lda" -SizeLimit 0 | Where-Object {$_.Name -match '_[fm]r[\d][0-99]' } | Sort-Object "Name"
- $MRs = Get-QADGroup -SearchRoot "$Domain/cda/Administration/FuncRoles" -SizeLimit 0 | Where-Object {$_.Name -match '_[fm]r[\d][0-99]' } | Sort-Object "Name"
- $Groups = $FRs + $MRs + $Admins + $AllOuAdmins
- #$Groups = $Admins + $AllOuAdmins
- $Result = @()
- $Result += "Group Name|Members|Type|Parent Container|Group Description|Domain"
- ForEach ($Group in $Groups) {
- $Members = Get-QADGroupMember $Group.DN -Indirect -SizeLimit 0
- #If ($Members -eq $null) {Write-output $Group.CanonicalName -fore red; $Result += "$($Group.Name)|-|-|-|$($Group.Description)"}
- If ($null -eq $Members) {$Result += "$($Group.Name)|-|-|-|$($Group.Description)|$Domain_Manfred"}
- Else {$Members | Sort-Object -Property type,name | ForEach-Object{$Result += "$($Group.Name)|$($_.Name)|$($_.Type)|$($_.ParentContainer)|$($Group.Description)|$Domain_Manfred"}}
- }
- # Export permissions for all the Members into csv
- Set-Content -Path $path -Value $Result
- Write-output "KPI OUAdmins $DomName has finished at $((Get-Date).ToString('yyyy.MM.dd-HH.mm'))"
- # copy "D:\reports\KPIReports\KPI*.csv" "d:\reports\KPIReports\KPI OUAdmins.csv"
- }
- Set-Location D:\scripts\KPIReports