The time-tested approach of appending data to the end of a file using >> doesn’t necessarily work with CSV files in Powershell, and Out-File with the -append switch typically results in a corrupted CSV file.
Recently I wrote a Powershell script for a customer to poll GPO information on a periodic basis and write that information to a CSV logfile for troubleshooting purposes.
The following worked for me, for what it’s worth :
# check for the Quest ActiveRoles Powershell module
if(-not(get-pssnapin -name Quest.ActiveRoles.ADManagement -ea:silentlycontinue)){add-pssnapin Quest.ActiveRoles.ADManagement}
# check for the GroupPolicy Powershell module
if(-not(get-module -name GroupPolicy -ea:silentlycontinue)){import-module grouppolicy}
$csvfile =‘c:\GPO_Diag_Report.csv’
# Get a list of all the root level domain GPOs and their link status, write to the CSVFILE
(Get-GPInheritance -target “dc=contoso,dc=com”).gpolinks | Select DisplayName, Enabled, Enforced, Target | export-csv $csvfile -notype
# Get a list of all GPOs by OU, pipe the resulting output as CSV formatted into a variable called CSVLines
get-qadobject -type organizationalunit -sizelimit 0 -DontUseDefaultIncludedProperties | foreach {(get-gpinheritance -target $_).gpolinks} | select DisplayName,Enabled,Enforced, Target | sort Enabled | ConvertTo-csv -outvariable CSVLines -notype
# Iterate thru each element in the CSVLines array and write the value to the CSVFILE using add-content
$CSVLines[1..($CSVLines.count –1)] | foreach-object {add-content -value $_ -path $csvfile}
There are undoubtedly other ways to achieve the same result, however this has worked reliably for me with no file corruption.