Powershell-Email не имеет того же формата, что и текст, несмотря на Out-string

Люди,

Google показывает мне, что у многих людей есть эта проблема, однако ответы, которые я получаю, похоже, не работают для меня. Или это, или я не понимаю.

Ситуация: у меня есть скрипт, который опрашивает и дает количество файлов. Он отлично работает, и я передаю его в текстовый файл

Foreach ($Directory in $Directories) {
    Write-Output "You have $Results files in that folder" | Out-File "C:Filecheck.txt" -Append
}

Filecheck выглядит отлично. Он делает выше цикл 6 раз (как у меня есть 6 каталогов), и он делает возврат каретки.

В электронной почте все перемешано. Здесь кто-то предложил мне использовать out-string, поэтому я сделал это:

$body = GC "C:Filecheck.txt" | Out-string

Я также видел

$body = GC "C:Filecheck.txt" -Raw

Я получаю письмо хорошо, но опять же, его все еще все одна линия, без возврата каретки.

Кто-нибудь знает? Я знаю, что я так близко.

2 ответа

  1. Можно попробовать использовать новую строку [Environment]. Я проверил с кодом ниже, и электронная почта выглядела хорошо и с правильными разрывами строки:

    $DirectoriesFiles = 2,3,4,5
    
    $newline = [Environment]::NewLine
    $body = "List of number of files" + $newline
    Foreach ($numOfFiles in $DirectoriesFiles) {
        $body += "You have $numOfFiles files in that folder" + $newline
    }
    
    $ol = New-Object -comObject Outlook.Application  
    $Mail = $ol.CreateItem(0)
    $Mail.To = "someone"
    $Mail.Subject = "some test e-mail"  
    $Mail.Body = $body
    $Mail.save() #or send
    

    Для примера я просто предположил, что у вас есть массив с количеством файлов в папке, но я думаю, что вы можете понять, как адаптироваться к контексту отсюда. Мое полученное письмо выглядело так:

    Список количества файлов

    У вас есть 2 файла в этой папке

    У вас есть 3 файла в этой папке

    У вас есть 4 файла в этой папке

    У вас есть 5 файлов в этой папке

  2. Спасибо за помощь. Мой адрес электронной почты компании не понравился формат, но я форматирую в html (используя
    ) и использую тег IsBodyHTML, он работает как шарм!

    Del "D:\Filecheck.txt"
    
    $Directories = GC "D:\Directory.txt"
    
    Foreach ($Directory in $Directories) {
    
    $Results = (Get-ChildItem $Directory).count
    
    If ($Results -gt 0) {
    
    Write-Output "...You have $Results files stuck in $Directory...<br><br> " | Out-File "D:\Filecheck.txt" -Append
    
    } else {
    
    Write-Output "Phew! We're good, <br><br>" | Out-File "D:\Filecheck.txt" -Append
    
    }
    
    $Results = $null
    
    }
    
    
    
        $body = GC "D:\Filecheck.txt" 
    
    
    Add-PSSnapin Microsoft.Exchange.Management.Powershell.Admin -erroraction silentlyContinue
    
    $SmtpClient = new-object system.net.mail.smtpClient
        $SmtpServer = "localhost"
        $SmtpClient.host = "relay.me.local"
    
    
    $msg = new-object Net.Mail.MailMessage
    
    $msg.IsBodyHTML = $true
    
    
    $smtp = new-object Net.Mail.SmtpClient($smtpServer)
    
    
    $msg.From = "TelluRyesFileCheck@me.you"
    
    
    $msg.To.Add("me@you.org")
    
    
    $msg.Subject = "Checking if files exist on 9901/2"
    
    
    $msg.Body = $body 
    
    
    $SmtpClient.Send($msg)