I have a script that connects to eDirectory, and gives me a list of groups & group members. The script works, returning 570,515 rows of data. If I Write-Host the results to screen, it takes about 5 minutes to complete. However, I don’t want results to screen, I want the results in a CSV or TXT so I can get the data loaded into a SQL table.
When I try to Out-File the results using a $Query.SizeLimit = 100, I can get that portion of the data in about 1.5 minutes
When I try to Out-File the results using no size limit, the script never finishes.
This is the entire code. PI data is replaced with #
#Setup Modules Import-Module ActiveDirectory Add-Type -AssemblyName System.DirectoryServices #Setup eDirectory Connection Variables $eDirPath = 'LDAP://####/o=####' $eDirUser = '########' $eDirPWD = '########' $eDirAuthType = 'None' #Establish eDirectory Connection and Enumerate $Root = New-Object System.DirectoryServices.DirectoryEntry -argumentlist $eDirPath,$eDirUser,$eDirPWD,$eDirAuthType $Query = New-Object System.DirectoryServices.DirectorySearcher $Query.SearchRoot = $Root #$Query.SizeLimit = 100 #limits results for testing purposes. Comment-out for full results $Query.Filter = "(|(ObjectClass=CCGroupApplication)(ObjectClass=CCGroupRole))" $SearchResults = $Query.FindAll() #Take all requested group names and group members, pipe them to CSV $CSVoutput = @() # creates an empty $CSVoutput variable ForEach ($Result in $SearchResults) ` { $CCGroupALL = [PSCustomObject]$Result.Properties ForEach ($Item in $CCGroupALL) { $Group = $Item.cn ForEach ($Member in $Item.member) { #Replace strips everything after the member ID $Member = $Member -Replace "uid=","" $Member = $Member -Replace "cn=","" $Member = $Member -Replace ",ou=people","" $Member = $Member -Replace ",ou=Clients","" $Member = $Member -Replace ",ou=Employees","" $Member = $Member -Replace ",ou=direct","" #Write-Host "$Group",",","$Member" #runs in 5 minutes $CSVoutput += "$Group , $Member" #adds each "cn , member" to the $CSVoutput variable } } } $CSVoutput | Out-File C:\Users\####\Desktop\CWSiGroupMembers.csv
The data is returned as the “GroupName , GroupMember” for each result. Like:
GroupA , jsmith
GroupA , sjones
GroupB , jsmith
GroupC , bsmith
Ultimately, I’m hoping someone can help me get the results into a file, even if the script takes a while to complete. I’m going to schedule it to run as a nightly job in SQL Server.