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.

NVLAN - Consultoria
Categorias: Soluções Microsoft