PowerShell通过电子邮件发送数组

时间:2016-07-14 05:54:24

标签: arrays email powershell

在Outlook 2013中通过电子邮件发送和查看时,我遇到了阵列丢失格式的问题

格式化数组在PowerShell中看起来像这样。

vServer                                          State             Connection                                                          
-------                                          -----             ----------                                                          
vServer-LB-1                                     UP                0                                                                   
vServer-LB-2                                     DOWN              0                                                                   
vServer-LB-3                                     UP                0                                                                   
vServer-LB-4                                     UP                0                                                                   
vServer-LB-5                                     UP                0                                                                   
vServer-LB-6                                     UP                2                                                                               

这是我格式化数组的方式(我试图通过电子邮件发送未格式化的数组,但它仍然是错误的)

$formatserver =  @{Expression={$_.name};Label="vServer";width=48}, `
                 @{Expression={$_.state};Label="State";width=17}, `
                 @{Expression={$_.establishedconn};Label="Connection"}

$Array = $server | Format-Table $formatserver

但是,通过电子邮件发送时(不完全相同,但格式不正确)。

  

vServer状态连接
  ------- ----- ----------
  vServer-LB-1 UP 0
  vServer-LB-2 DOWN 0
  vServer-LB-3 UP 0
  vServer-LB-4 UP 0
  vServer-LB-5 UP 0
  vServer-LB-6 UP 2

以下是发送电子邮件的代码

$from = 'Reporting <Support@Me.com>'
$to = 'me@me.com'
$subject = 'Report'
$body = $Array | Out-String
$smtpServer = 'mail.me.com'

$msg = New-Object Net.Mail.MailMessage($from, $to, $subject, $body)
#$msg.IsBodyHTML = $true
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($msg)

请注意,我尝试了| out-string$msg.IsBodyHTML = $true

的多种组合

1 个答案:

答案 0 :(得分:1)

您可以使用<pre>中的HTML标记来保留电子邮件中的空格。

$body = $Array | Out-String | %{"<pre>"+$_+"</pre>"}

确保将IsBodyHTML设为$true

注意:表格格式仅限于PowerShell Shell / Console的缓冲区。因此,如果您的表宽度超过Shell / Console上的缓冲区宽度,则表格将不会完整显示。

为了解决这个问题,您可以使用以下命令在脚本开头设置shell缓冲区:

$pshost = get-host
$pswindow = $pshost.ui.rawui
$newsize = $pswindow.buffersize
$newsize.height = 3000
$newsize.width = 1500
$pswindow.buffersize = $newsize

或者转到Shell / Console上的File >> Properties,然后更改以下属性。

enter image description here