11

これは、メールを解析するために使用しているコードです。それらが特定の日付に一致する場合は、それらを他のメールのリストに追加し、それをフラット ファイルにします。

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
}

私が遭遇する問題は、replace ステートメントが$message.Body.Replace("`n",", ")実際には改行を削除せず、ファイルが適切に作成されないことです。本体部分の中身が全て一行になっていることを確認する方法はありますか?

オブジェクトが文字列であることを確認した$message.bodyので、これが機能しない理由はわかりません。

4

2 に答える 2

30

コメンターは return `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() メソッドを 2 回使用します。

$x.memburr2.replace("`n",", ").replace("`r",", ")
于 2013-02-05T05:05:18.607 に答える
6

上記のどれも私にとってはうまくいきませんでした。うまくいったのは:

$foo = [string]::join("",($foo.Split("`n")))
于 2020-07-12T21:18:09.060 に答える