How to Format a list to be emailed?

With a number of searches I’ve put together a script that will email me a list of empty directories on our SAN. The email works, and sends me a rather ugly list on one line:

\sann\rdb$\RDT00437 \sann\rdb$\TEST0 \sann\rdb$\TEST1

When I try to pipe it to FORMAT-LIST I get garbage (times 3):


How can I format the list to look like:



$mailto2 = "
$day_of_week = get-date -uformat “%A”
$empty_dir = get-childitem \sann\rdb$\ | Where-Object { $.PSIsContainer } |
Where-Object { $
.GetFiles().Count -eq 0 } |
Where-Object { $.GetDirectories().Count -eq 0 } | ForEach-Object {$.FullName} | sort
$smtpServer = “
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$msg = New-Object Net.Mail.MailMessage
$msg.From = “
$msg.Subject = $mailsubject + $day_of_week
$msg.IsBodyHTML = $false
$msg.Body = $empty_dir

To answer your question, you are creating a string doing the for loop: ForEachObject{$_.FullName}

Have you looked at using HTML reporting? Don Jones put together a free e-book on it and there are various other articles on Powershell HTML reporting. Basically:

[li]Remove the ForEach logic[/li]
[li]Update .IsBodyHTML to $true[/li]
[li]Update .Body to ($empty_dir |ConvertTo-Html | Out-String) [/li]

The Body parameter of Send-MailMessage (or property of the MailMessage class, in this case) takes a String, and you’re passing it an Array. Arrays, when automatically converted to strings, are separated by the output field separator ($OFS), which defaults to a space.

The simplest way to get what you see at the console is to pipe your array to Out-String before assigning it to the Body property:

$msg.Body = $empty_dir | Out-String

Great! Thank you, Dave and Rob. Simple is best for this little weekly report.