Powershell 将CSV字符串附加到电子邮件

Powershell 将CSV字符串附加到电子邮件,powershell,Powershell,我正在尝试将CSV数据附加到电子邮件,但“发送邮件”不接受它作为-attachment参数。我希望避免创建文件。有没有办法将内容直接作为附件发送到电子邮件 $attachment = $DataSet.Tables[0] | ConvertTo-Csv -NoTypeInformation Send-MailMessage -From $from -To $to -Subject $subject -Body $emailbody ... -Attachments $attachm

我正在尝试将CSV数据附加到电子邮件,但“发送邮件”不接受它作为-attachment参数。我希望避免创建文件。有没有办法将内容直接作为附件发送到电子邮件

$attachment =  $DataSet.Tables[0] | ConvertTo-Csv -NoTypeInformation

Send-MailMessage 
-From $from 
-To $to 
-Subject $subject 
-Body $emailbody 
...
-Attachments $attachment 

不,无论如何都不要使用
发送邮件

-Attachments
参数接受文件路径,而不是任意字符串数据:

# create a temp file
$tmpFile = [System.IO.Path]::GetTempFileName()

# export data to file
$DataSet.Tables[0] | Export-Csv -NoTypeInformation -Path $tmpFile.FullName

# rename to something sensible
$tmpFile = (Rename-Item $tmpFile -NewName "report.csv" -PassThru).FullName

# send mail
Send-MailMessage ... -Attachments $tmpFile

# clean up
Remove-Item $tmpFile

如果您不介意手动执行大部分
Send MailMessage
,则可以从内存创建附件,而无需将其写入磁盘:

$msg=[System.Net.Mail.MailMessage]::new()
# ...
$attachmentData=$DataSet.Tables[0]|转换为Csv-NoTypeInformation
$attachment=[System.Net.Mail.attachment]::CreateAttachmentFromString(($attachmentData-join[environment]::NewLine),“report.csv”)
$msg.Attachments.Add($attachment)
# ...

不,无论如何都不要使用
发送邮件

-Attachments
参数接受文件路径,而不是任意字符串数据:

# create a temp file
$tmpFile = [System.IO.Path]::GetTempFileName()

# export data to file
$DataSet.Tables[0] | Export-Csv -NoTypeInformation -Path $tmpFile.FullName

# rename to something sensible
$tmpFile = (Rename-Item $tmpFile -NewName "report.csv" -PassThru).FullName

# send mail
Send-MailMessage ... -Attachments $tmpFile

# clean up
Remove-Item $tmpFile

如果您不介意手动执行大部分
Send MailMessage
,则可以从内存创建附件,而无需将其写入磁盘:

$msg=[System.Net.Mail.MailMessage]::new()
# ...
$attachmentData=$DataSet.Tables[0]|转换为Csv-NoTypeInformation
$attachment=[System.Net.Mail.attachment]::CreateAttachmentFromString(($attachmentData-join[environment]::NewLine),“report.csv”)
$msg.Attachments.Add($attachment)
# ...

但如果我使用导出CSV自动创建临时文件,不是吗?我本来希望不创建任何文件就可以做到这一点。@John正如我在顶部提到的,
-Attachments
只接受文件路径,因此实际上没有任何办法:)您是否试图避免清理临时文件或类似的东西?如果不在某处写入文件,您将无法创建文件并将其附加到电子邮件。“某处”可以是内存,如果你想处理所有的开销,但除非没有其他选项,否则它会带来更多的麻烦。@John在答案中添加了一个无文件选项(我很久没有使用邮件API了,所以不确定在不指定内容类型的情况下这是否有效)!但是,生成的excel文件的列名和数据位于同一行。这是应该在查询级别格式化的内容吗?我假设字符串形式的CSV缺少导出到文件时所具有的excel样式格式,但如果使用自动创建临时文件的导出CSV,不是吗?我本来希望不创建任何文件就可以做到这一点。@John正如我在顶部提到的,
-Attachments
只接受文件路径,因此实际上没有任何办法:)您是否试图避免清理临时文件或类似的东西?如果不在某处写入文件,您将无法创建文件并将其附加到电子邮件。“某处”可以是内存,如果你想处理所有的开销,但除非没有其他选项,否则它会带来更多的麻烦。@John在答案中添加了一个无文件选项(我很久没有使用邮件API了,所以不确定在不指定内容类型的情况下这是否有效)!但是,生成的excel文件的列名和数据位于同一行。这是应该在查询级别格式化的内容吗?我假设字符串形式的CSV缺少excel样式的格式,当您将其导出到文件时,它会有这种格式吗?