Link to home
Start Free TrialLog in
Avatar of PeterSinger
PeterSingerFlag for Australia

asked on

Append to a CSV file in powershell from a function

Function CSVFile($ProcessID,$Settings,$Identity,$CurrentSetting,$ChangeRequired,[Switch]$New){

	If($New -eq $True){
	Remove-Item ".\CasChkReport.csv" -Force -Confirm:$false -ErrorAction SilentlyContinue
	$CSV = New-Object System.Object 
	$CSV | Add-Member -type NoteProperty -Name ProcessID -Value $ProcessID
	$CSV | Add-Member -type NoteProperty -Name Settings -Value $Settings
	$CSV | Add-Member -type NoteProperty -Name Identity -Value $Identity
	$CSV | Add-Member -type NoteProperty -Name CurrentSetting -Value $CurrentSetting
	$CSV | Add-Member -type NoteProperty -Name ChangeRequired -Value $ChangeRequired
	$CSV | Export-Csv "CasChkReport.csv" -NoTypeInformation
	}

	Else{
	$CSV = New-Object System.Object 
	$Existing = Import-Csv .\CasChkReport.csv -header "ProcessID","Settings","Identity","CurrentSetting","ChangeRequired"
	#$newRow = New-Object PsObject -Property @{ProcessID=$ProcessID;Settings=$Settings;Identity=$Identity;CurrentSetting=$CurrentSetting;ChangeRequired=$ChangeRequired}
	#$CSV += $newRow
	#$CSV | Export-Csv "CasChkReport.csv" -NoTypeInformation
	
	$CSV | Add-Member -type NoteProperty -Name ProcessID -Value $ProcessID
	$CSV | Add-Member -type NoteProperty -Name Settings -Value $Settings
	$CSV | Add-Member -type NoteProperty -Name Identity -Value $Identity
	$CSV | Add-Member -type NoteProperty -Name CurrentSetting -Value $CurrentSetting
	$CSV | Add-Member -type NoteProperty -Name ChangeRequired -Value $ChangeRequired
	$CSV += $Existing
	$CSV | Export-Csv "CasChkReport.csv" -NoTypeInformation
	}
}


csvfile -processID "1" -Settings "1" -Identity "2" -CurrentSetting "1" -ChangeRequired "1" -new
csvfile -processid "2" -Settings "2" -Identity "1" -CurrentSetting "2" -ChangeRequired "2" 

Open in new window

How do I make this work. I have tried many things and I know I am close.
ASKER CERTIFIED SOLUTION
Avatar of slidingfox
slidingfox
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
In line 12, rather than exporting $CSV, first add all $CSV items to a new variable , say, $Table:
$Table += $CSV
Then export this $Table variable (outside ForEach loop, if you are going to use such a loop)
$Table| Export-Csv "CasChkReport.csv" -NoTypeInformation

In lines 26 and 27, your have variables in reverse order:
$Existing += $CSV
$Existing | Export-Csv "CasChkReport.csv" -NoTypeInformation


Permit me to add, your $CSV-named variable to add fields/arrays is rather confusing since exporting this variable would not generate a CSV file.  It would be better if you call it something like $array
Avatar of PeterSinger

ASKER

Thanks, thats what I am looking for.