Powershell Group Values ​​Диаграммы Winforms

У меня небольшая проблема. Я пытаюсь добиться чего-то вроде этого: http://www.codeproject.com/Articles/168056/Windows-Charting-Application Первая диаграмма на странице. У меня есть мой код здесь

### Load assemblies
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization")

$Servers = Get-XAWorkerGroup -WorkerGroupName Agresso | select servernames -ExpandProperty servernames
$SessionTable = @()
foreach ($Server in $Servers) {
    $ActiveSessions = (Get-XASession -ServerName $Server | ?{$_.State -eq "Active"}).Count
    $DisconnectedSessions = (Get-XASession -ServerName $Server | ?{$_.State -eq "Disconnected"}).Count
    $ListeningSessions = (Get-XASession -ServerName $Server | ?{$_.State -eq "Listening"}).Count
    $LoopArray = "$Server,$ActiveSessions,$DisconnectedSessions,$ListeningSessions"
    $SessionTable += $LoopArray
}

### CREATE CHART
$Chart = New-object System.Windows.Forms.DataVisualization.Charting.Chart 
$Chart.Width = 1600
$Chart.Height = 400
$Chart.Left = 10 
$Chart.Top = 10

# create a chartarea to draw on and add to chart 
$ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea 
$Chart.ChartAreas.Add($ChartArea) 
foreach ($server in $SessionTable) {
    $Splitted = $Server.Split(",")
    $Name = $Splitted[0]
    $Active = $Splitted[1]
    $Disconnected = $Splitted[2]
    $Listening = $Splitted[3]
    [void]$Chart.Series.Add($Name)
    $dp1 = new-object System.Windows.Forms.DataVisualization.Charting.DataPoint(0,$Active)
    $dp2 = New-Object System.Windows.Forms.DataVisualization.Charting.DataPoint(0,$Disconnected)
    $dp3 = New-Object System.Windows.Forms.DataVisualization.Charting.DataPoint(0,$Listening)
    $dp1.Color = "Blue"
    $dp2.Color = "Red"
    $dp3.Color = "Orange"
    $dp1.AxisLabel = $Name + " Active"
    $dp2.AxisLabel = $Name + " Disconnected"
    $dp3.AxisLabel = $Name + " Listening"
    $Chart.Series[$Name].Points.Add($dp1)
    $Chart.Series[$Name].Points.Add($dp2)
    $Chart.Series[$Name].Points.Add($dp3)
    $ChartArea.AxisX.LabelStyle.Angle = "-90"
    $ChartArea.AxisX.LabelStyle.Interval = "1"
}
$title = new-object System.Windows.Forms.DataVisualization.Charting.Title 
$Chart.Titles.Add( $title ) 
$Chart.Titles[0].Text = "Testing"
$Chart.Titles[0].Font = New-Object System.Drawing.Font("arial",20,[System.Drawing.FontStyle]::Bold)
### Show on form
$Chart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor 
                [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 
$Form = New-Object Windows.Forms.Form
$Form.Text = "Testing form"
$Form.Width = 1400
$Form.Height = 820
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()

Но мой вывод выглядит так: введите здесь описание изображения

Я хочу, чтобы вывод был похож на тот, который я связал вверху, поэтому в моем случае: имя сервера с 3 комбинированными значениями для разных сеансов. Например, Server1 со значениями 6, 7, 0. Надеюсь, я четко понимаю, чего хочу достичь! :D


person user2782999    schedule 14.04.2014    source источник


Ответы (1)


Я думаю, вам нужно будет использовать 'AlignDataPointsByAxisLabel', чтобы получить это Работа. Вот как будет выглядеть ваш код.

### Load assemblies
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization")

$SessionTable = @()
$SessionTable = Get-Content C:\Users\hemanth.damecharla\Desktop\serverdetails.txt

### CREATE CHART
$Chart = New-object System.Windows.Forms.DataVisualization.Charting.Chart 
$Chart.Width = 1024
$Chart.Height = 768
$Chart.Left = 10 
$Chart.Top = 10

# create a chartarea to draw on and add to chart 
$ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea 
$Chart.ChartAreas.Add($ChartArea) 
$seriesnames = @() #need to get all the series name to use with AlignDataPointsByAxisLabel
foreach ($server in $SessionTable) {
    $Splitted = $Server.Split(",")
    $Name = $Splitted[0]
    $Active = [double]($Splitted[1])
    $Disconnected = [double]($Splitted[2])
    $Listening = [double]($Splitted[3])
    [void]$Chart.Series.Add($Name)
    $dp1 = new-object System.Windows.Forms.DataVisualization.Charting.DataPoint(0,$Active)
    $dp2 = New-Object System.Windows.Forms.DataVisualization.Charting.DataPoint(0,$Disconnected)
    $dp3 = New-Object System.Windows.Forms.DataVisualization.Charting.DataPoint(0,$Listening)
    $dp1.Color = "Blue"
    $dp2.Color = "Red"
    $dp3.Color = "Orange"
    $dp1.AxisLabel = $Name + " Active"
    $dp2.AxisLabel = $Name + " Disconnected"
    $dp3.AxisLabel = $Name + " Listening"
    $Chart.Series[$Name].Points.Add($dp1)
    $Chart.Series[$Name].Points.Add($dp2)
    $Chart.Series[$Name].Points.Add($dp3)
    $ChartArea.AxisX.LabelStyle.Angle = "-90"
    $ChartArea.AxisX.LabelStyle.Interval = "1"

    $seriesnames += $Name #collect each series name
}
$seriesnames = $seriesnames -join ','

$title = new-object System.Windows.Forms.DataVisualization.Charting.Title 
$Chart.Titles.Add( $title ) 
$Chart.Titles[0].Text = "Testing"
$Chart.Titles[0].Font = New-Object System.Drawing.Font("arial",20,[System.Drawing.FontStyle]::Bold)

### Show on form
$Chart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor 
                [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left 
$Chart.AlignDataPointsByAxisLabel($seriesnames) #call the method
$Form = New-Object Windows.Forms.Form
$Form.Text = "Testing form"
$Form.Width = 1400
$Form.Height = 820
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()
person sqlchow    schedule 14.04.2014
comment
Когда я использую ваш код, мой результат получается таким: gofile.me/2q0zW/MofWSb9p Единственное я меняю, это ввод моих серверов, который я использую, как и раньше :) - person user2782999; 15.04.2014
comment
Я знаю, что это немного поздно. Но да, та картинка, которую вы показали, так и получается. Я пробовал несколько разных вещей, но не мог найти способ добраться до того, что вы хотели. Кроме того, что касается примера проекта кода, на который вы ссылались в своем посте, и графика, на который вы ссылались из этого поста. График относится к четырем разным сериям, а не к точкам данных из одной серии. Я думаю, это может быть из-за того, как сериал построен. - person sqlchow; 03.05.2014