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

EGr*_*EGr 2 powershell outlook parsing comobject powershell-2.0

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

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
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,替换语句on $message.Body.Replace("`n",", ")实际上并没有删除换行符,并且文件没有得到适当的创建.有没有办法确认身体部分的全部内容变成一条线?

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

小智 19

以上都不适合我。起作用的是:

$foo = [string]::join("",($foo.Split("`n")))
Run Code Online (Sandbox Code Playgroud)


noa*_*oam 14

评论者指出返回`r,也许这个特殊字符应该单独替换.猜测这可以使用.replace()方法和一些正则表达式来完成.或者更简单(并且笨拙地承认)在$ list1 + =行之前使用另一个变量,例如:

$bod = $message.body -replace "`n",", " -replace "`r",", "
Run Code Online (Sandbox Code Playgroud)

矫枉过正,但这是一个从头开始的小例子.我建议你添加$ 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"
Run Code Online (Sandbox Code Playgroud)

如果这没有帮助,我会好奇在输出中有问题的换行之前和之后出现的情况.

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

$x.memburr2.replace("`n",", ").replace("`r",", ")
Run Code Online (Sandbox Code Playgroud)