Powershell HTML输出不是预期的

时间:2013-04-03 21:56:03

标签: powershell html-email

基本上我只是想将所有BIOS信息输出到HTML表格并通过电子邮件发送给自己。

具体来说,我只是想恢复输出:

get-wmiobject -class "Win32_BIOS" -namespace "root\CIMV2"

进入一张桌子。我已经尝试了 convertto-html ,但输出到处都是,到很多列的方式(难以描述,在这里不能很好地翻译)。

到目前为止:

 function sendMail{
     $smtpServer = "server.com.au"
     $msg = new-object Net.Mail.MailMessage
     $smtp = new-object Net.Mail.SmtpClient($smtpServer)
     $msg.IsBodyHTML = $true
     $msg.From = "sender@server.com.au"
     $msg.To.Add("email@server.com.au")
     $msg.subject = "Subject"
     $msg.body = "$body"
     $smtp.Send($msg)  
}


$bios = get-wmiobject -class "Win32_BIOS" -namespace "root\CIMV2"
$body = $bios | ConvertTo-Html
sendmail

虽然我也尝试过 format-table 等等。

2 个答案:

答案 0 :(得分:2)

你是怎么想的那样的?期望的结果是什么? ConvertTo-HTML将对象转换为包含表格的HTML页面。这意味着它包含了每个属性,这使得它很乱,因为它们有很多(通常是WMI对象)。如果ConvertTo-HTML属性名称是标题,并且值是连续的,那么您可能会看到,当输出项目数组时,ConvertTo-HTML更合适(这将导致许多行具有单个标题行。

如果您只想显示某些属性,则需要在使用select-object之前使用ConvertTo-HTML对其进行定义。

另一种解决方案(取决于你需要的)只是使用控制台的输出而不是转换为html。实施例

$bios = get-wmiobject -class "Win32_BIOS" -namespace "root\CIMV2"
$body = $bios | Out-String  
#You can use $bios | Format-List Your, Properties, Here | Out-String to specify different columns

$body

SMBIOSBIOSVersion : 3602
Manufacturer      : American Megatrends Inc.
Name              : 3602
SerialNumber      : System Serial Number
Version           : ALASKA - 1072009

或者

$body = $bios | Format-Table -AutoSize | Out-String
#Again, you can specify columns with $bios| Format-Table -AutoSize My, Properties | Out-String

SMBIOSBIOSVersion Manufacturer             Name SerialNumber         Version         
----------------- ------------             ---- ------------         -------         
3602              American Megatrends Inc. 3602 System Serial Number ALASKA - 1072009

答案 1 :(得分:2)

Graimer是正确的。试图把它变成一张桌子并把它放到一封电子邮件中只会弄得一团糟。您可以通过以下方式将其作为HTML列表格式发送到电子邮件中:

[string]$body = $bios | ConvertTo-Html -As List

但是如果你想要一张桌子,你将不得不将其削减到合理数量的列以适应电子邮件。