2017-07-28 37 views
0

我一直試圖從sql查詢中提取數據並將其轉換爲HTML,最終將結果嵌入到電子郵件正文中。將SQL收集轉換爲Powershell中的字符串

我的代碼如下;

$SQLCommand = New-Object System.Data.SqlClient.SqlCommand 
$SQLCommand.CommandText = "SELECT DISTINCT SYS.Name,LDISK.DeviceID0,LDISK.Size0 AS DiskSizeMB,LDISK.FreeSpace0 AS FreeSpaceMB,SCCM.dbo.v_GS_WORKSTATION_STATUS.LastHWScan,SCCM.dbo.v_GS_LastSoftwareScan.LastScanDate 
    FROM v_FullCollectionMembership_Valid SYS 
     JOIN v_GS_LOGICAL_DISK LDISK ON SYS.ResourceID = LDISK.ResourceID 
     INNER JOIN SCCM.dbo.v_GS_WORKSTATION_STATUS 
     ON LDISK.ResourceID = SCCM.dbo.v_GS_WORKSTATION_STATUS.ResourceID 
     INNER JOIN SCCM.dbo.v_GS_LastSoftwareScan 
     ON SCCM.dbo.v_GS_LastSoftwareScan.ResourceID = 
     SCCM.dbo.v_GS_WORKSTATION_STATUS.ResourceID 
    WHERE 
     LDISK.DeviceID0 = 'C:' AND 
     LDISK.DriveType0 = 3 AND 
     ((LDISK.FreeSpace0 <= ((LDISK.Size0 * 10)/100)) OR 
     (LDISK.FreeSpace0 <= 1024)) AND 
     SYS.CollectionID = 'SMS00001' 
    ORDER BY 
     SYS.Name" 
    $SQLCommand.Connection = $SQLConnection 

    $SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
    $SqlAdapter.SelectCommand = $SQLCommand     
    $SQLDataset = New-Object System.Data.DataSet 
    $SqlAdapter.fill($SQLDataset) | out-null 

    $FileInfo = $SQLDataset.tables | FT -AutoSize 

存儲在$ FileInfo中的數據的結果格式看起來不錯;

名稱DeviceID0 DiskSizeMB FreeSpaceMB LastHWScan LastScanDate
---- --------- ---------- ----------- ---- ------ ------------
Server01 C:53244 2010 7/28/2017 3:18:01 PM 7/28/2017 5:25:51 AM

...但是,當我把這個轉換爲ConvertTo-HTML($ FileInfo | ConvertTo-HTML)時,結果格式如此出現;

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>HTML TABLE</title> 
</head><body> 
<table> 
<colgroup><col/><col/><col/><col/><col/><col/></colgroup> 
<tr><th>ClassId2e4f51ef21dd47e99d3c952918aff9cd</th><th>pageHeaderEntry</th><th>pageFooterEntry</th><th>autosizeInfo</th><th>shapeInfo</th><th>groupingEntry</th></tr> 
<tr><td>033ecb2bc07a4d43b5ef94ed5a35d280</td><td></td><td></td><td>Microsoft.PowerShell.Commands.Internal.Format.AutosizeInfo</td><td>Microsoft.PowerShell.Commands.Internal.Format.TableHeaderInfo</td><td></td></tr> 
<tr><td>9e210fe47d09416682b841769c78b8a3</td><td></td><td></td><td></td><td></td><td></td></tr> 
<tr><td>27c87ef9bbda4f709f6b4002fa4af63c</td><td></td><td></td><td></td><td></td><td></td></tr> 
<tr><td>27c87ef9bbda4f709f6b4002fa4af63c</td><td></td><td></td><td></td><td></td><td></td></tr> 
<tr><td>27c87ef9bbda4f709f6b4002fa4af63c</td><td></td><td></td><td></td><td></td><td></td></tr> 

當我看看我的$ FileInfo的類型時,我得到這個;

$FileInfo.GetType(); 

IsPublic IsSerial Name          BaseType                                        
-------- -------- ----          --------                                        
True  True  Object[]         System.Array 

...所以我懷疑是ConvertTo-HTML模塊尋找字符串格式輸入,但是我似乎無法得到這個正常工作 - 甚至在試圖像$FileInfo | Out-String -Stream

選擇我要相信這可以輕鬆完成 - 我只是找不到正確的方法。提前致謝!

+0

一般來說,PowerShell命令期望(數據)_objects_作爲輸入(不是字符串),和'的ConvertTo-Html'也不例外。 _Formatting_ cmdlet,如'Format-Table'('ft')應該被_solely_用於_immediate display_ - 這些cmdlet的輸出對於進一步處理數據沒有用處,因此將'Format-Table'輸出分配給變量管道到'ConvertTo-Html'不會產生有意義的結果。 – mklement0

+0

謝謝mklement0 - 我將不得不記住關於格式 - 表 – mandg

回答

1

刪除格式表,使用與第一臺exlude沒有必要選項選擇,試試這個

$SQLDataset.tables[0] | 
    select * -ExcludeProperty RowError, RowState, HasErrors, Name, Table, ItemArray | 
     ConvertTo-Html 
+0

此代碼的工作。這是語義... – Esperento57

+0

這是完美的 - 謝謝Esperento57!現在它顯示完全像我一直在努力的日子! – mandg