При отправке хранилища результатов в переменную на электронную почту все результаты отображаются в 1 строке - PullRequest
0 голосов
/ 18 апреля 2020

Когда я вижу результат в powershell, он довольно хорош, но после отправки по электронной почте весь результат в $ list отображается в 1 строке. Любая проблема с моим кодом?

$servers = "serveraddress"
$recipients = "anything@gmail.com" 

foreach ($server in $servers){
    Write-Output $server
    $list = Invoke-command -computer $server {$profiles = Get-ChildItem -Recurse -path c:\TestFolder aaa.xml; 
    foreach ($p in $profiles){
        $p.fullname
    }
    }

}
$list
if ($list -ne $null){
    Send-MailMessage -From noreply@gmail.com -To $recipients -Subject "Something Wrong" -Body “Server: $($server)`nLocations:`n$list`n” -SmtpServer smtp.abc.com
}
else
{
    #do nothing
}

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

Server: serveraddress
Locations:
c:\TestFolder\AAA\aaa.xml c:\TestFolder\bbb\aaa.xml

1 Ответ

0 голосов
/ 18 апреля 2020

Если я правильно понимаю вопрос, я предлагаю сделать что-то вроде этого:

$servers    = "serveraddress"
$recipients = "anything@gmail.com" 

$list = foreach ($server in $servers) {
    $files = Invoke-Command -ComputerName $server {(Get-ChildItem -Path 'c:\TestFolder' -Filter 'aaa.xml' -File -Recurse).FullName}
    # next join everything with newlines to output a block of text that gets collected in array variable $list
    # DO NOT OUTPUT ANYTHING ELSE HERE
    if ($files) {
        "Server: $server{0}Locations:{0}{1}{0}" -f [Environment]::NewLine, ($files -join [Environment]::NewLine)
    }
}


if ($list) {
    # show on screen
    $list

    # create a hashtable with parameters for Send-MailMessage
    $mailParams = @{
        From       = 'noreply@gmail.com'
        To         = $recipients
        Subject    = 'Something Wrong'
        Body       = ($list -join [Environment]::NewLine)
        SmtpServer = 'smtp.abc.com'
    }
    # send the email
    Send-MailMessage @mailParams
}
else {
    #do nothing
}

Примечание. Я использую Splatting в командлете Send-MailMessage. Это создает код, который легче поддерживать.

Вывод будет выглядеть следующим образом:

Server: server1
Locations:
c:\TestFolder\AAA\aaa.xml
c:\TestFolder\bbb\aaa.xml

Server: server2
Locations:
c:\TestFolder\CCC\aaa.xml
c:\TestFolder\DDD\aaa.xml
c:\TestFolder\EEE\aaa.xml

Если вы устанавливаете тело письма равным HTML с переключателем -BodyAsHtml , затем замените все вхождения [Environment]::NewLine в коде на '<br />'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...