2014-09-19 115 views
0

我試圖從三個不同的環境中返回帶有消息隊列的表。我可以複製和粘貼所有三個代碼的現有代碼,但我想使它更清潔,更可重用。PowerShell循環通過消息隊列

有沒有辦法循環遍歷每個消息隊列並將它們返回到單獨的表中(即:Dev,Dev2,Dev3隊列)?

[object]$dev3Queues = gwmi -class Win32_PerfFormattedData_msmq_MSMQQueue -computerName  myServer | Where{$_.Name -like "*dev3*" } | select Name,MessagesInQueue #| Out-File "C:\test.txt" 
[object]$dev2Queues = gwmi -class Win32_PerfFormattedData_msmq_MSMQQueue -computerName myServer | Where{$_.Name -like "*dev2*" } | select Name,MessagesInQueue #| Out-File "C:\test2.txt" 


[object]$devQueues = gwmi -class Win32_PerfFormattedData_msmq_MSMQQueue -computerName myServer | 
Where{$_.Name -notlike "*dev2*" -AND $_.Name -notlike "*dev3*" -AND $_.Name -notlike "*private*" -AND $_.Name -notlike "*Computer Queues*" -AND $_.Name -notlike "*uat*"} | select Name,MessagesInQueue #| Out-File "C:\test3.txt" 

$Html = "<html><head>Whoo Queues</head><body><table border=1>" 
foreach($element in $devQueues) 
{ 
$Html += "<tr><td>" + $element.Name + "</td><td>"+ $element.MessagesInQueue + "</td> </tr>" 
} 


$Html += "</table></body></html>" 

$Html | out-file C:\temp\DEVQueues.html 

#environmentloop - dev,dev2,dev3 
#{ 

#queue loop + html 

#} 

回答

0

您可以使用ConvertTo-Html cmdlet與選項-Fragment到對象的列表轉換爲對象屬性的HTML表格。

Get-WmiObject -Class Win32_PerfFormattedData_msmq_MSMQQueue | 
    select Name, MessagesInQueue | 
    ConvertTo-Html -Fragment 

此外,運行Get-WmiObject對使用​​WMI過濾器的遠程服務器時,提供了比檢索所有結果和過濾他們在本地主機上Where-Object更好的性能。

$computer = 'myServer' 
$filter = 'Name LIKE "%dev3%"' 

Get-WmiObject -Class Win32_PerfFormattedData_msmq_MSMQQueue -Computer $computer ` 
    -Filter $filter 

不過,既然你要篩選各種條件相同的數據集,你的情況,最好的辦法可能是先獲取來自遠程主機的所有相關數據有一個更一般的WMI過濾器(以避免多個遠程連接),然後使用若干Where-Object過濾器在本地處理它們:

$server = 'myServer' 
$wmiFilter = 'NOT (Name LIKE "%private%" OR Name LIKE "%Computer Queues%" ' + 
      'OR Name LIKE "%uat%")' 
$psFilters = { $_.Name -like "*dev3*" }, 
      { $_.Name -like "*dev2*" }, 
      { $_.Name -notlike "*dev2*" -and $_.Name -notlike "*dev3*" } 

$data = Get-WmiObject -Class Win32_PerfFormattedData_msmq_MSMQQueue ` 
      -Computer $server -Filter $wmiFilter 

'<html><head>Whoo Queues</head><body>' 
foreach ($filter in $psFilters) { 
    $data | ? $filter | select Name, MessagesInQueue | ConvertTo-Html -Fragment 
} 
'</body></html>' 
+0

這很有效地得到隊列並格式化它們。有沒有什麼辦法讓循環打印出每個表的特定名稱(例如:「Dev1 Queues」,「Dev2 Queues」等)還是調整html的問題? – parabellum27 2014-09-24 06:00:02

+0

@ parabellum27我不認爲'ConvertTo-Html'提供了這個功能,所以你可能必須在生成的HTML字符串上使用字符串替換:'($ data | ... | ConvertTo-Html -Fragment)-replace'

',「
」'。 – 2014-09-24 10:59:28