Here's one solution. What it does is convert the objects to csv-strings and then modify them before saving the csv to a file.
foreach($user in $MailBoxList)
{
$UserInfo = New-Object System.Object
$UserInfo | Add-Member -Type NoteProperty -Name LegacyExchangeDN -Value $user.LegacyExchangeDN
$UserInfo | Add-Member -Type NoteProperty -Name CloudEmailAddress -Value $CloudEmailAddress
$UserInfo | Add-Member -Type NoteProperty -Name OnPremiseEmailAddress -Value
$user.PrimarySMTPAddress.ToString()
$UserInfo | Add-Member -Type NoteProperty -Name MailboxGUID -Value $user.ExchangeGUID
$Users += $UserInfo
}
#Convert to csv-formatted-strings
$csv = $Users | ConvertTo-Csv -NoTypeInformation -Delimiter ","
#Get header
$out = @($csv[0])
#Remove quotes for all but first column
$out += $csv[1..($csv.Length-1)] | % {
[regex]::Match($_,'(^"[^"]*",)(.*)') | % { "{0}{1}" -f $_.Groups[1], $_.Groups[2].Value.Replace('"',"") }
}
$out | Set-Content -Path ".\cloud.csv"
Another apporach without regex:
#Remove quotes for all but first column
$out += $csv[1..($csv.Length-1)] | % {
$values = $_ -split '","'
$values[0] + '"' + $values[1..($values.Length-1)] -join ','
}