在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
答案 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
,然后更改以下属性。