2012-01-18 46 views
4

簡而言之,我試圖從Powershell腳本發送一個電子郵件,其中列出了一個目錄的內容。Powershell:如何格式化Get-Childitem的電子郵件?

爲了做到這一點,我將文本存儲在一個變量中,然後將該變量插入到Send-MailMessage中。

我的問題是這樣的。當我管的對象Out-String如下,它不插入新行:

$mailbody += "<p>" + (get-childitem $path | select-object Name | Out-String -width 40) + "</P>" 

顯然,當在提示輸入Get-Childitem,輸出被很好地格式化用換行,然而,當存儲到一個變量然後通過電子郵件發送(在HTML電子郵件中),沒有換行符,這會導致不可讀的長文件名字符串。

我該怎麼做?

+0

難道換行符在那裏,但不顯示?在HTML中,新行被視爲空白。 – theglauber

+0

我認爲這是原因,但是當我刪除'-BodyAsHtml'開關以確保電子郵件是在plantext中發送的時候,仍然沒有新行 - 只是空格。 – hazymat

+0

你是否使用Outlook作爲郵件客戶端?如果是這樣,除非您將「從純文本消息中刪除額外換行符」設置關閉,否則Outlook可能會爲您刪除換行符。 – theglauber

回答

6

可以使用ConvertTo-Html cmdlet來做到這一點:

get-childitem $path | select-object Name | ConvertTo-Html -fragment 

它會爲你創建一個漂亮的表可以在HTML電子郵件的形式發送。 -fragment部分刪除頭部和身體等,只給出表。

+0

嘿 - 當你知道如何時,這很容易。太感謝了! – hazymat

2

如何使用ConvertTo-Html cmdlet?填寫您的環境信息。

$path = "C:\" 
[string] $html = dir $path | ConvertTo-Html 

$smptServer = '' 
$to = '' 
$from = '' 
$subject = 'Test' 
Send-MailMessage -To $to -From $from -Body $html -BodyAsHtml -SmtpServer $smptServer -Subject $subject 

編輯 - 這工作,但電子郵件看起來像廢話。如果你想讓它看起來就像當你在PowerShell窗口用做dir這樣它:

[string] $html = dir $path | Select Mode, LastWriteTime, Length, Name | ConvertTo-Html 
+0

謝謝 - 這正是我一直在尋找的。 – hazymat

相關問題