使用Send-MgUserMail发送内存CSV附件时换行丢失问题求助
解决Send-MgUserMail内存生成CSV附件换行丢失问题
问题核心是ConvertTo-Csv -NoTypeInformation返回的是字符串数组(每行对应CSV的一行),直接将这个数组传给GetBytes时,PowerShell会默认用空格拼接所有元素,导致换行丢失,所有内容挤成一行。
正确转换方法
只需把CSV字符串数组拼接成包含正确换行符的完整字符串,再转字节和Base64即可。推荐两种方式:
方式1:用-Join指定换行符
$output = @( [PSCustomObject] @{ App = "App1" AppId = "43a9087d-8551-47d5-9869-3287736ce7c3" Date = "2023/01/26" User = "me@email.com" }, [PSCustomObject] @{ App = "App2" AppId = "f33750cd-c79b-43be-8e55-ee14d163e2b3" Date = "2024/01/26" User = "me@email.com" } ) # 将CSV数组拼接为带Windows标准换行符的完整字符串 $csvContent = $output | ConvertTo-Csv -NoTypeInformation -Join "`r`n" # 也可以用系统默认换行符:-Join [Environment]::NewLine $bytes = [System.Text.Encoding]::UTF8.GetBytes($csvContent) $base64string = [Convert]::ToBase64String($bytes)
方式2:用Out-String转换
$csvContent = $output | ConvertTo-Csv -NoTypeInformation | Out-String -Stream # 若要去掉末尾多余空行,可改用: # $csvContent = ($output | ConvertTo-Csv -NoTypeInformation | Out-String).TrimEnd() $bytes = [System.Text.Encoding]::UTF8.GetBytes($csvContent) $base64string = [Convert]::ToBase64String($bytes)
完整工作代码
把转换后的$base64string代入邮件发送逻辑即可:
$output = @( [PSCustomObject] @{ App = "App1" AppId = "43a9087d-8551-47d5-9869-3287736ce7c3" Date = "2023/01/26" User = "me@email.com" }, [PSCustomObject] @{ App = "App2" AppId = "f33750cd-c79b-43be-8e55-ee14d163e2b3" Date = "2024/01/26" User = "me@email.com" } ) $csvContent = $output | ConvertTo-Csv -NoTypeInformation -Join "`r`n" $bytes = [System.Text.Encoding]::UTF8.GetBytes($csvContent) $base64string = [Convert]::ToBase64String($bytes) $params = @{ UserId = "me@email.com" BodyParameter = @{ Message = @{ Subject = "Test Email" Body = @{ ContentType = "Html" Content = "This is sample text." } ToRecipients = @( @{ EmailAddress = @{ Address = "toAddress@email.com" } } ) Attachments = @( @{ "@odata.type" = "#microsoft.graph.fileAttachment" Name = "SampleFile.csv" ContentType = "text/csv" ContentBytes = $base64string } ) } SaveToSentItems = "false" } } Send-MgUserMail @params
内容的提问来源于stack exchange,提问作者swtto
相关产品推荐
相关产品推荐

