2014-09-19 166 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