Parsing 如何从PowerShell中的字符串中删除所有换行符?

Parsing 如何从PowerShell中的字符串中删除所有换行符?,parsing,powershell,outlook,powershell-2.0,comobject,Parsing,Powershell,Outlook,Powershell 2.0,Comobject,这是我用来解析电子邮件的代码。如果它们与特定日期匹配,我想将它们添加到其他电子邮件列表中,然后将其放入平面文件: outfile = "C:\Temp\emails.csv" $olFolderInbox = 6 $ol = new-object -comobject "Outlook.Application" $mapi = $ol.getnamespace("mapi") $inbox = $mapi.GetDefaultFolder($olFolderInbox) $msgs = $inb

这是我用来解析电子邮件的代码。如果它们与特定日期匹配,我想将它们添加到其他电子邮件列表中,然后将其放入平面文件:

outfile = "C:\Temp\emails.csv"
$olFolderInbox = 6
$ol = new-object -comobject "Outlook.Application"
$mapi = $ol.getnamespace("mapi")
$inbox = $mapi.GetDefaultFolder($olFolderInbox)
$msgs = $inbox.Folders.Item("root")
$list1 = @()
foreach($message in ($msgs.items))
{
    if($message.ReceivedTime -gt $(get-date).adddays(-14))
    {
        $list1 += "$($message.Subject);$($message.ReceivedTime);$($message.Body.Replace("`n",", "))"
    }
}
if(Test-Path $outfile)
{
    Remove-Item $outfile
    Add-Content $outfile $list1
}
else
{
    Add-Content $outfile $list1
}
我遇到的问题是,
$message.Body.replace(“`n”,“,”)
上的replace语句实际上并没有删除换行符,文件也没有正确创建。是否有办法确认主体部分的全部内容成为一行


我已经确认,
$message.body
对象是一个字符串,所以我不确定这为什么不起作用。

注释者指向返回的`r,可能应该单独替换。猜测这可以通过.replace()方法和一些正则表达式来完成。 或者更简单地说(我承认是笨拙地)在$list1+=行之前使用另一个变量,例如:

$bod = $message.body -replace "`n",", " -replace "`r",", "
过分了,但这里有一个从头开始的小例子。我建议您添加$y,以便更容易操纵消息体

$x = new-object -type psObject
$x | add-member memburr1 -membertype noteproperty -value "no trouble here"
$x | add-member memburr2 -membertype noteproperty -value "uh `n oh `r spaghettio"

$y = $x.memburr2 -replace "`n",", " -replace "`r",", "

$z = @()
$z += "$($x.memburr1);$y"
如果这没有帮助,我会很好奇在输出中出现问题的换行之前和之后会出现什么

编辑:或使用.replace()方法两次:

$x.memburr2.replace("`n",", ").replace("`r",", ")

以上这些都不适合我。我们所做的工作是:

$foo = [string]::join("",($foo.Split("`n")))

对于html消息,新行将是
否?您是否尝试过使用(…替换(“'r'n”“,”,”))(用反勾号替换)?如果Replace方法不起作用,请尝试
$($message.Body-join“,”)
。如果它实际上是一个字符串数组
string[]
,就可以这样做。我没有outlook,所以我可以自己检查对象类型,所以首先将此作为注释:-)Kayasax的也在某些方面。您现在有3件事要尝试:)您也可以尝试PowerShell的拆分操作符,例如
$message.Body-split“'r?”n”
(将backtick替换为“)。我已经分别尝试了所有这些操作,并且一起尝试了,但似乎没有任何效果。它可能与add-content cmdlet有关。当我以CSV格式写入文件时,文件仅为一行(但导入Excel时导入为多行);但是如果我把它写成txt,它在记事本上也有换行符。。。所以这个问题仍然没有解决,但我可能离得越来越近了。@Graimer在我之前的评论中忘记提到你了