Falaremos sobre um exemplo prático a partir do outro post nosso sobre como Criar um gráfico utilizando o PowerShell. Desta vez, usaremos o PowerShell para listar os tamanhos das pastas de um determinado local, gerar gráfico e exportá-lo para uma imagem. Esse script poderia ser usado para uma tarefa agendada que atualizasse a imagem de um site de manter o consumo das pastas do servidor de arquivos, por exemplo.
Abra o PowerShell ISE e coloque o seguinte conteúdo (altere as partes em cinza conforme a sua realidade):
$targetfolder=’C:\Temp‘ $imageFile = ‘C:\Temp\Result.png‘ $Data = Get-Date -Format “dd/MM/yyyy” $Name = $targetfolder.Split(“\”)[-1] If (!$Name){ $Name = $targetfolder.Split(“\”)[0] } Add-type -AssemblyName System.Windows.Forms Add-type -AssemblyName System.Windows.Forms.DataVisualization $chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart $chart.Size = ‘1000,600’ $ChartTitle = New-Object System.Windows.Forms.DataVisualization.Charting.Title $chart.Titles.Add($ChartTitle) $chart.Titles[0].Font = ‘ArialBold, 18pt’ $chart.Titles[0].Text = “$Name em $Data” $ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea $chart.ChartAreas.Add($ChartArea) $dataColl = @() Get-ChildItem $targetfolder -Directory | ForEach-Object { $Name = $_.Name $Size = [Math]::Round( ((Get-ChildItem $targetfolder\$Name -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB) ) $dataObject = $null $dataObject = New-Object PSObject Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldername” -value $Name Add-Member -inputObject $dataObject -memberType NoteProperty -name “SizeGb” -value $Size $dataColl += $dataObject } $dataColl = $dataColl | Sort-Object SizeGb -Descending $chart.Series.Add(“Data”) $chart.Series[“Data”].Points.DataBindXY($dataColl.foldername,$dataColl.SizeGb) $chart.ChartAreas.AxisX.MajorGrid.Enabled = $False $chart.SaveImage($imageFile,’PNG’) |
Execute, verifique se a resposta ficou como desejado. Nesse exemplo deixamos bem separado o que é a criação do array de informações e o que é a geração de gráfico, mas é possível gerar de outra forma. Por exemplo, podemos em cada novo valor gerar uma nova série:
$targetfolder=’C:\Temp‘ $imageFile = ‘C:\Temp\Result.png‘ $targetfolder=’C:\Temp’ $imageFile = ‘C:\Temp\Result2.png’ function MakeBarSeries { Param ( [string]$Name, [int]$Value ) Try{ $series = $chart.Series.Add($Name) #$series.ChartType = ‘Bar’ $series.Label = $Name $series.Font = ‘ArialBold, 10pt’ [void]$series.Points.AddY($Value) } Catch{ Throw $_ } } $Data = Get-Date -Format “dd/MM/yyyy” $Name = $targetfolder.Split(“\”)[-1] If (!$Name){ $Name = $targetfolder.Split(“\”)[0] } Add-type -AssemblyName System.Windows.Forms Add-type -AssemblyName System.Windows.Forms.DataVisualization $chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart $chart.Size = ‘1200,600’ $ChartTitle = New-Object System.Windows.Forms.DataVisualization.Charting.Title $chart.Titles.Add($ChartTitle) $chart.Titles[0].Font = ‘ArialBold, 18pt’ $chart.Titles[0].Text = “$Name em $Data” $ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea $chart.ChartAreas.Add($ChartArea) $dataColl = @() Get-ChildItem $targetfolder -Directory | ForEach-Object { $Name = $_.Name $Size = [Math]::Round( ((Get-ChildItem $targetfolder\$Name -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB) ) MakeBarSeries -Name $Name -Value $Size } $chart.ChartAreas.AxisX.MajorGrid.Enabled = $False $chart.SaveImage($imageFile,’PNG’) |
Fontes/Referências
NVLAN – Criar um gráfico utilizando o PowerShell
NVLAN – Realizar uma consulta SNMP pelo PowerShell
https://engram9.info/excel-vba-macros/charttype-property.html
https://social.technet.microsoft.com/Forums/en-US/bc6af53d-b392-49f3-80d0-0b36157c87be/charting-with-powershell?forum=winserverpowershell
http://woshub.com/powershell-get-folder-sizes
Mais Informações
Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.
Entre em contato conosco pelo e-mail equipe@nvlan.com.br.