Powershell循环通过消息队列

时间:2014-09-19 05:41:30

标签: 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 

 #}

1 个答案:

答案 0 :(得分:0)

您可以使用带有-Fragment选项的ConvertTo-Html cmdlet将对象列表转换为对象属性的HTML表。

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

此外,使用WMI筛选器对远程服务器运行Get-WmiObject时,提供的性能优于检索所有结果并使用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>'