2013-04-03 87 views
-1

基本上我只是試圖輸出所有的BIOS信息到一個HTML表格並通過電子郵件發送給我自己。PowerShell 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 = "[email protected]" 
    $msg.To.Add("[email protected]") 
    $msg.subject = "Subject" 
    $msg.body = "$body" 
    $smtp.Send($msg) 
} 


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

雖然我也曾嘗試格式表和其他幾件事情。

回答

2

格雷默是正確的。試圖製作一張表並將其放入一封電子郵件只會讓事情變得糟糕。你可以這樣做,把它變成一個電子郵件作爲HTML列表格式:

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

但是,如果你想有一個表,你將不得不削下來的列合理數量,以適應​​在一封電子郵件中。

+0

一張桌子並不重要,我應該澄清一點。我基本上只需要一個可讀的格式。編輯::只是測試,這正是我以後,輸出到電子郵件中的可讀格式。謝謝 – mhouston100 2013-04-03 23:16:52

2

你是怎麼想的?期望的結果是什麼? ConvertTo-HTML將對象轉換爲帶有表格的HTML頁面。這意味着它包含了EVERY屬性,這使得它非常麻煩,因爲它們中有很多(像WMI對象通常那樣)。由於ConvertTo-HTML屬性名稱是標題,並且值是連續的,所以您可以看到,ConvertTo-HTML更適合輸出項目數組(這將導致具有單個標題行的多行)

如果你只想顯示一些屬性,你需要在使用ConvertTo-HTML之前用select-object來定義它。

另一種解決方案(取決於你需要的)就是使用控制檯的輸出而不是轉換爲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 
+0

感謝您的迴應,仍然不是我所期望的,這兩個輸出在控制檯中都是正確的(格式化),但是當它們在電子郵件中發送時,它們都會在一行中一起運行。 – mhouston100 2013-04-03 23:16:14

+0

你用$ msg.IsBodyHtml = $ false來試試嗎? (默認值)我的Out-String解決方案不是html代碼。 – 2013-04-04 07:40:04