Powershell: добавьте новую строку в Email doesent work - PullRequest
0 голосов
/ 15 января 2019

Мне нужно проверить диски и отправить электронное письмо со статусом.

Но все, что я получаю, это тело в одной строке вместо 'r'n. Что не так?

$smtpserver = "server"
$from = "from"
$to = "to"
$subject = "subject"

$servernames = Get-Content "C:\computer.txt"

$Diskreport = $Servernames | % {
    Get-WmiObject Win32-LogicalDisk -Computername $_ -Filter "Drivetype=3" -ErrorAction SilentContinue |
        ? { ($_.freespace/$size) -le '0.7' }
}

[String]$body = $null
$DiskReport | % {
    $body += (Servername: "+$_.SystemName) + "'r'n"
    $body += (Drive Letter: "+$_.DeviceID.ToString()) + "'r'n"
    $body += (TotalCapacity (GB): "+((($_.size /1024) /1000) /1000).ToString()) + "'r'n"
    $body += (TotalCapacity (GB): "+((($_.Freespace /1024) /1000) /1000).ToString()) + "'r'n"
    $body += (TotalCapacity (GB): "+($Freespace /$_.size).ToString()) 
}

Send-MailMessage -Subject $Subject -Body $Body -From $from -To $to -SmtpServer $smtpserver -Port 587

1 Ответ

0 голосов
/ 15 января 2019

Строка "'r'n" - это всего четыре нормальных символа - одиночная кавычка, r, одиночная кавычка и n.

Если вы хотите возврат каретки и перевод строки в строке, используйте обратную черту (`) для экранирования r и n, , как указано в комментариях

$body += "(Servername: " + $_.SystemName + ")`r`n" # and so on...

Альтернативный подход состоит в том, чтобы просто использовать оператор -join для объединения всех строк с помощью [Environment]::NewLine:

$bodyLines = @(
    "(Servername: $($_.SystemName))"
    "(Drive Letter: $($_.DeviceID.ToString()))"
    # etc...
)
$body += $bodyLines -join [Environment]::NewLine
...