metho
metho

Reputation: 73

Powershell exporting csv issue

<# 
Run the Script On Active Directory to remove disabled users from All Groups and Set description what user was member of group if you have all the disable users in an OU. 
Just add -SearchBase "OU=disabled,DC=domain,DC=com" after  -filter 'enabled -eq $false' 

#> 
import-module activedirectory 
$users=get-aduser -filter 'enabled -eq $false' -SearchBase "OU=Lockdown,DC=home,DC=ac,DC=uk" -Properties samaccountname,memberof  |select samaccountname, @{n=’MemberOf’; e= { ( $_.memberof | % { (Get-ADObject $_).Name }) -join “,” }}  


#set description 
Foreach ($user in $users) 
{ Set-ADUser $user.samaccountname -Replace @{info="Was a member of :- $($user.memberof)"} 
# Export the list to csv
$Groups = (Get-ADPrincipalGroupMembership -Identity $user.SamAccountName | Select-Object -ExpandProperty name) -join ','

get-aduser $user.SamAccountName -properties memberof,samaccountname,givenname,surname | select samaccountname, @{name="Groups";expression={$Groups}} | export-csv "C:\Users\Administrator\Desktop\grpsss.csv" -Delimiter ";"



# Remove From all the Groups 
 Get-ADGroup -Filter {name -notlike "*domain users*"}  | Remove-ADGroupMember -Members $user.samaccountname -Confirm:$False  

} 


 $total = ($users).count  

 Write-Host "$total accounts have been processed..." -ForegroundColor Green 

This script Removes all the groups from Disabled Users (From Disabled OU), It adds the names of those groups to Information Field along with an export of csv with the same information.

Porblem is that the csv is only populated with one user's groupmembership when there are many users in Disabled OU. question is, how do i export all the user and their group membership in a csv format. so i have a list of all the users that have been processed.

I always thought that export-csv will export eveything that powershell processes?

Thanks for your help in advance.

Upvotes: 1

Views: 595

Answers (1)

Shaneis
Shaneis

Reputation: 1085

Your script attempts to export a csv for each user:

Foreach ($user in $users) {
...
get-aduser $user.SamAccountName -properties memberof,samaccountname,givenname,surname | 
  select samaccountname, @{name="Groups";expression={$Groups}} |
  export-csv "C:\Users\Administrator\Desktop\grpsss.csv" -Delimiter ";"
...
}

However, this will mean that only the last user run in this foreach block will have its data written out to a .csv file.

This is because Export-Csv will overwrite the contents of an existing .csv file by default. So every user in your foreach block will overwrite the user before it.

To fix this, add the parameter switch -Append to the end of your Export-Csv command. This will add on each users data to the end of the file rather than overwrite it e.g.

Foreach ($user in $users) {
...
get-aduser $user.SamAccountName -properties memberof,samaccountname,givenname,surname | 
  select samaccountname, @{name="Groups";expression={$Groups}} |
  export-csv "C:\Users\Administrator\Desktop\grpsss.csv" -Delimiter ";" -Append
...
}

Upvotes: 1

Related Questions