Если я правильно понимаю вопрос, я предлагаю сделать что-то вроде этого:
$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 />'