powershell - 当将结果存储在变量中发送到电子邮件时,所有结果显示在 1 行中
问题描述
当我在 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
解决方案
如果我正确理解了这个问题,我建议这样做:
$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
}
注意我在cmdlet上使用Splatting 。Send-MailMessage
这样做会创建更易于维护的代码。
输出看起来像:
服务器:server1 地点: c:\TestFolder\AAA\aaa.xml c:\TestFolder\bbb\aaa.xml 服务器:server2 地点: c:\TestFolder\CCC\aaa.xml c:\TestFolder\DDD\aaa.xml c:\TestFolder\EEE\aaa.xml
如果您使用 switch 将邮件正文设置为 HTML ,则将代码中-BodyAsHtml
所有出现的 替换为[Environment]::NewLine
'<br />'
推荐阅读
- mysql - 如何在 mysql 工作台中打开带有 .ibd 文件扩展名的数据库文件夹?
- java - 应用程序在 USB 调试模式下工作正常,但是当我生成签名 APK 并安装它时,它不工作
- python - 将时区感知的日期时间保存为字符串,然后稍后将其恢复为日期时间
- video - 如何将 vimeo 中已有的视频添加到我的频道并展示
- c - 从磁盘上的空白空间读取字节
- firebase - 基本输入无法将数据传递到 vuejs 中的后端
- reactjs - 为什么 Promise.all 没有获得价值?
- freeswitch - Freeswitch 覆盖端口
- c# - 添加页面轮播
- javascript - 如何根据条件更改代码值的颜色,例如如果我的值小于 0,则在 OBIEE 中为绿色,否则为红色?