PowerShell – Disk Space GUI Tool - Sharing a useful PowerShell GUI script to check disk drive usage along with a graph.
Copy and paste the below code on Powershell-ISE for better execution.
Tool Details :The layout details are as follows
When we made a wrong entries, message box will popup.
Right server will lead to a grid with data populated along with graph which represents its usage
You can also download the code: PowerShellGUI – DiskSpace – Tool
Note:- Works with Powershell 2.0 and above.
*******************************************************************************
Code:- Copy and Paste the below code
*******************************************************************************
function OnApplicationLoad { if([Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization") -eq $null) { #Microsoft Chart Controls are not installed [void][reflection.assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][System.Windows.Forms.MessageBox]::Show("Microsoft Chart Controls for Microsoft .NET 3.5 Framework is required","Microsoft Chart Controls Required") #Open the URL [System.Diagnostics.Process]::Start("http://www.microsoft.com/downloads/en/details.aspx?familyid=130F7986-BF49-4FE5-9CA8-910AE6EA442C&displaylang=en"); return $false } return $true #return true for success or false for failure } function OnApplicationExit { $script:ExitCode = 0 #Set the exit code for the Packager } #endregion Application Functions #---------------------------------------------- # Generated Form Function #---------------------------------------------- function Call-Disk_Space_Chart_pff { #---------------------------------------------- #region Import the Assemblies #---------------------------------------------- [void][reflection.assembly]::Load("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") [void][reflection.assembly]::Load("mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.Windows.Forms.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35") #endregion Import Assemblies #---------------------------------------------- #region Generated Form Objects #---------------------------------------------- [System.Windows.Forms.Application]::EnableVisualStyles() $formDiskSpacePieChart = New-Object System.Windows.Forms.Form #$buttonSave = New-Object System.Windows.Forms.Button $dataGrid1 = New-Object System.Windows.Forms.DataGrid $chart1 = New-Object System.Windows.Forms.DataVisualization.Charting.Chart #$savefiledialog1 = New-Object System.Windows.Forms.SaveFileDialog $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState #endregion Generated Form Objects $btnRefresh = New-Object System.Windows.Forms.Button $btngetdata=New-Object System.Windows.Forms.Button $rtbPerfData = New-Object System.Windows.Forms.RichTextBox #$pictureBox1 = New-Object System.Windows.Forms.PictureBox $lblServicePack = New-Object System.Windows.Forms.Label $lblDBName= New-Object System.Windows.Forms.Label $lblOS = New-Object System.Windows.Forms.Label $statusBar1 = New-Object System.Windows.Forms.StatusBar $btnClose = New-Object System.Windows.Forms.Button #$comboServers = New-Object System.Windows.Forms.ComboBox $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState $txtComputerName = New-Object System.Windows.Forms.TextBox $dataGrid1 = New-Object System.Windows.Forms.DataGrid function Load-Chart { Param( #$XPoints, $YPoints, $XTitle, $YTitle, $Title, $ChartStyle) [Parameter(Position=1,Mandatory=$true)] [System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl , [Parameter(Position=2,Mandatory=$true)] $XPoints , [Parameter(Position=3,Mandatory=$true)] $YPoints , [Parameter(Position=4,Mandatory=$false)] [string]$XTitle , [Parameter(Position=5,Mandatory=$false)] [string]$YTitle , [Parameter(Position=6,Mandatory=$false)] [string]$Title , [Parameter(Position=7,Mandatory=$false)] [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]$ChartType , [Parameter(Position=8,Mandatory=$false)] $SeriesIndex = 0 , [Parameter(Position=9,Mandatory=$false)] $TitleIndex = 0, [switch]$Append) $ChartAreaIndex = 0 if($Append) { $name = "ChartArea " + ($ChartControl.ChartAreas.Count + 1).ToString(); $ChartArea = $ChartControl.ChartAreas.Add($name) $ChartAreaIndex = $ChartControl.ChartAreas.Count - 1 $name = "Series " + ($ChartControl.Series.Count + 1).ToString(); $Series = $ChartControl.Series.Add($name) $SeriesIndex = $ChartControl.Series.Count - 1 $Series.ChartArea = $ChartArea.Name if($Title) { $name = "Title " + ($ChartControl.Titles.Count + 1).ToString(); $TitleObj = $ChartControl.Titles.Add($name) $TitleIndex = $ChartControl.Titles.Count - 1 $TitleObj.DockedToChartArea = $ChartArea.Name $TitleObj.IsDockedInsideChartArea = $false } } else { if($ChartControl.ChartAreas.Count -eq 0) { $name = "ChartArea " + ($ChartControl.ChartAreas.Count + 1).ToString(); [void]$ChartControl.ChartAreas.Add($name) $ChartAreaIndex = $ChartControl.ChartAreas.Count - 1 } if($ChartControl.Series.Count -eq 0) { $name = "Series " + ($ChartControl.Series.Count + 1).ToString(); $Series = $ChartControl.Series.Add($name) $SeriesIndex = $ChartControl.Series.Count - 1 $Series.ChartArea = $ChartControl.ChartAreas[0].Name } } $Series = $ChartControl.Series[$SeriesIndex] $ChartArea = $ChartControl.ChartAreas[$Series.ChartArea] $Series.Points.Clear() if($Title) { if($ChartControl.Titles.Count -eq 0) { $name = "Title " + ($ChartControl.Titles.Count + 1).ToString(); [void]$ChartControl.Titles.Add($name) $TitleIndex = $ChartControl.Titles.Count - 1 $TitleObj.DockedToChartArea = $ChartArea.Name $TitleObj.IsDockedInsideChartArea = $false } $ChartControl.Titles[$TitleIndex].Text = $Title } if($ChartType) { $Series.ChartType = $ChartType } if($XTitle) { $ChartArea.AxisX.Title = $XTitle } if($YTitle) { $ChartArea.AxisY.Title = $YTitle } if($XPoints -isnot [Array] -or $XPoints -isnot [System.Collections.IEnumerable]) { $array = New-Object System.Collections.ArrayList $array.Add($XPoints) $XPoints = $array } if($YPoints -isnot [Array] -or $YPoints -isnot [System.Collections.IEnumerable]) { $array = New-Object System.Collections.ArrayList $array.Add($YPoints) $YPoints = $array } $Series.Points.DataBindXY($XPoints, $YPoints) } function Clear-Chart { Param ( [Parameter(Position=1,Mandatory=$true)] [System.Windows.Forms.DataVisualization.Charting.Chart]$ChartControl , [Parameter(Position=2, Mandatory=$false)] [Switch]$LeaveSingleChart ) $count = 0 if($LeaveSingleChart) { $count = 1 } while($ChartControl.Series.Count -gt $count) { $ChartControl.Series.RemoveAt($ChartControl.Series.Count - 1) } while($ChartControl.ChartAreas.Count -gt $count) { $ChartControl.ChartAreas.RemoveAt($ChartControl.ChartAreas.Count - 1) } while($ChartControl.Titles.Count -gt $count) { $ChartControl.Titles.RemoveAt($ChartControl.Titles.Count - 1) } if($ChartControl.Series.Count -gt 0) { $ChartControl.Series[0].Points.Clear() } } #endregion <# $FormEvent_Load={ #TODO: Initialize Form Controls here Load-PieChart } #> function Load-PieChart { param( [string[]]$servers = "$ENV:COMPUTERNAME" ) foreach ($server in $servers) { #Get Disk space using WMI and make sure it is an array $Disks = @(Get-WMIObject -Namespace "root\cimv2" -class Win32_LogicalDisk -Impersonation 3 -ComputerName $server -filter "DriveType=3" ) #Remove all the current charts Clear-Chart $chart1 #Loop through each drive foreach($disk in $Disks) { $UsedSpace =(($disk.size - $disk.freespace)/1gb) $FreeSpace = ($disk.freespace/1gb) #Load a Chart for each Drive Load-Chart $chart1 -XPoints ("Used ({0:N1} GB)" -f $UsedSpace), ("Free Space ({0:N1} GB)" -f $FreeSpace) -YPoints $UsedSpace, $FreeSpace -ChartType "Bar" -Title ("Volume: {0} ({1:N1} GB)" -f $disk.deviceID, ($disk.size/1gb) ) -Append } #Set Custom Style foreach ($Series in $chart1.Series) { $Series.CustomProperties = "PieDrawingStyle=Concave" } } } function Get-DiskDetails { param( [string[]]$ComputerName = "LocalHost" ) $Object =@() $array = New-Object System.Collections.ArrayList foreach ($Computer in $ComputerName) { if(Test-Connection -ComputerName $Computer -Count 1 -ea 0) { Write-Verbose "$Computer online" $D=Get-WmiObject win32_logicalDisk -ComputerName $Computer |select-object DeviceID, VolumeName,FreeSpace,Size,driveType |?{$_.DriveType -eq 3} foreach($disk in $D) { $TotalSize = $Disk.Size /1Gb -as [int] $InUseSize = ($Disk.Size /1Gb -as [int]) – ($Disk.Freespace / 1Gb -as [int]) $FreeSpaceGB = $Disk.Freespace / 1Gb -as [int] $FreeSpacePer = ((($Disk.Freespace /1Gb -as [float]) / ($Disk.Size / 1Gb -as [float]))*100) -as [int] $Object += New-Object PSObject -Property @{Name= $Computer.ToUpper();DeviceID= $Disk.DeviceID;VolumeName=$Disk.VolumeName;SizeGB=$TotalSize;InUseGB=$InUseSize;FreeSpaceGB=$FreeSpaceGB;PercentageGB=$FreeSpacePer } } } } $column1 = @{expression="Name"; width=30; label="Name"; alignment="left"} $column2 = @{expression="DeviceID"; width=15; label="DeviceID"; alignment="left"} $column3 = @{expression="VolumeName"; width=15; label="VolumeName"; alignment="left"} $column4 = @{expression="SizeGB"; width=15; label="SizeGB"; alignment="left"} $column5 = @{expression="InUseGB"; width=15; label="InUseGB"; alignment="left"} $column6 = @{expression="FreeSpaceGB"; width=15; label="FreeSpaceGB"; alignment="left"} $column7 = @{expression="PercentageGB"; width=15; label="PercentageGB"; alignment="left"} #$Object|format-table $column1, $column2, $column3 ,$column4, $column5, $column6,$column7 #$Object.GetEnumerator() $object|format-table $column1, $column2, $column3 ,$column4 ,$column5 ,$column6,$column7 $array.AddRange($Object) $dataGrid1.DataSource = $array } $GetData={ $statusBar1.text="Getting Disk Space Details Data..please wait" if(Test-Connection -ComputerName $txtComputerName.text -Count 1 -ea 0) { $data=Get-DiskDetails -ComputerName $txtComputerName.text | Out-String Load-PieChart -servers $txtComputerName.text } else { [Windows.Forms.MessageBox]::Show(“Unable to connect to the server!!") } #$rtbPerfData.text=$data.Trim() $errorActionPreference="Continue" $statusBar1.Text="Ready" } $Close={ $formDiskSpacePieChart.close() } # --End User Generated Script-- #---------------------------------------------- # Generated Events #---------------------------------------------- $Form_StateCorrection_Load= { #Correct the initial state of the form to prevent the .Net maximized form issue $formDiskSpacePieChart.WindowState = $InitialFormWindowState } #---------------------------------------------- #region Generated Form Code #---------------------------------------------- # # formDiskSpacePieChart # $formDiskSpacePieChart.Controls.Add($buttonSave) $formDiskSpacePieChart.Controls.Add($chart1) $formDiskSpacePieChart.ClientSize = New-Object System.Drawing.Size(575,575) $formDiskSpacePieChart.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $formDiskSpacePieChart.MinimumSize = New-Object System.Drawing.Size(300,300) $formDiskSpacePieChart.Name = "formDiskSpacePieChart" $formDiskSpacePieChart.Text = "Disk Space Pie Chart" $formDiskSpacePieChart.Controls.Add($btnRefresh) $formDiskSpacePieChart.Controls.Add($lblServicePack) $formDiskSpacePieChart.Controls.Add($lblOS) $formDiskSpacePieChart.Controls.Add($lblDBName) $formDiskSpacePieChart.Controls.Add($statusBar1) $formDiskSpacePieChart.Controls.Add($btnClose) $formDiskSpacePieChart.Controls.Add($txtComputerName) $formDiskSpacePieChart.ClientSize = New-Object System.Drawing.Size(600,600) $formDiskSpacePieChart.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $formDiskSpacePieChart.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::SizableToolWindow $formDiskSpacePieChart.Name = "form1" $formDiskSpacePieChart.Text = "Disk Space Information" $formDiskSpacePieChart.add_Load($PopulateList) $formDiskSpacePieChart.add_Load($FormEvent_Load) $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Width = 575 $System_Drawing_Size.Height = 125 $dataGrid1.Size = $System_Drawing_Size $dataGrid1.DataBindings.DefaultDataSourceUpdateMode = 0 $dataGrid1.HeaderForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0) $dataGrid1.Name = "dataGrid1" $dataGrid1.DataMember = "" $dataGrid1.TabIndex = 0 $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X =13 $System_Drawing_Point.Y = 62 $dataGrid1.Location = $System_Drawing_Point $formDiskSpacePieChart.Controls.Add($dataGrid1) $dataGrid1.CaptionText='Disk Details' # # btnRefresh # $btnRefresh.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $btnRefresh.Enabled = $TRUE $btnRefresh.Location = New-Object System.Drawing.Point(230,35) $btnRefresh.Name = "btnRefresh" $btnRefresh.Size = New-Object System.Drawing.Size(95,20) $btnRefresh.TabIndex = 7 $btnRefresh.Text = "GetDiskSpace" $btnRefresh.UseVisualStyleBackColor = $True $btnRefresh.add_Click($GetData) # # # btnClose # $btnClose.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $btngetdata.Enabled = $TRUE $btnClose.Location = New-Object System.Drawing.Point(373,35) $btnClose.Name = "btnClose" $btnClose.Size = New-Object System.Drawing.Size(95,20) $btnClose.TabIndex = 3 $btnClose.Text = "Close" $btnClose.UseVisualStyleBackColor = $True $btnClose.add_Click($Close) # # lblDBName # $lblDBName.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $lblDBName.Font = New-Object System.Drawing.Font("Lucida Console",8.25,1,3,1) $lblDBName.Location = New-Object System.Drawing.Point(13,10) $lblDBName.Name = "lblDBName" $lblDBName.Size = New-Object System.Drawing.Size(178,23) $lblDBName.TabIndex = 0 $lblDBName.Text = "Enter Server Name " $lblDBName.Visible = $TRUE # #$txtComputerName.text #txtComputerName $txtComputerName.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $txtComputerName.Location = New-Object System.Drawing.Point(13, 35) $txtComputerName.Name = "txtComputerName" $txtComputerName.TabIndex = 1 $txtComputerName.Size = New-Object System.Drawing.Size(200,70) $txtComputerName.visible=$TRUE # # lblServicePack # $lblServicePack.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $lblServicePack.Font = New-Object System.Drawing.Font("Lucida Console",8.25,1,3,1) $lblServicePack.Location = New-Object System.Drawing.Point(13,100) $lblServicePack.Name = "lblServicePack" $lblServicePack.Size = New-Object System.Drawing.Size(278,23) $lblServicePack.TabIndex = 0 $lblServicePack.Text = "ServicePack" $lblServicePack.Visible = $False # # lblOS # $lblOS.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $lblOS.Font = New-Object System.Drawing.Font("Lucida Console",8.25,1,3,1) $lblOS.Location = New-Object System.Drawing.Point(12,77) $lblOS.Name = "lblOS" $lblOS.Size = New-Object System.Drawing.Size(278,23) $lblOS.TabIndex = 2 $lblOS.Text = "Service Information" $lblOS.Visible = $False # # statusBar1 # $statusBar1.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $statusBar1.Location = New-Object System.Drawing.Point(0,365) $statusBar1.Name = "statusBar1" $statusBar1.Size = New-Object System.Drawing.Size(390,22) $statusBar1.TabIndex = 5 $statusBar1.Text = "statusBar1" # # chart1 # $chart1.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right $chart1.BackGradientStyle = [System.Windows.Forms.DataVisualization.Charting.GradientStyle]::TopBottom $System_Windows_Forms_DataVisualization_Charting_ChartArea_1 = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea $System_Windows_Forms_DataVisualization_Charting_ChartArea_1.Area3DStyle.Enable3D = $True $System_Windows_Forms_DataVisualization_Charting_ChartArea_1.AxisX.Title = "Disk" $System_Windows_Forms_DataVisualization_Charting_ChartArea_1.AxisY.Title = "Disk Space (MB)" $System_Windows_Forms_DataVisualization_Charting_ChartArea_1.Name = "ChartArea1" [void]$chart1.ChartAreas.Add($System_Windows_Forms_DataVisualization_Charting_ChartArea_1) $chart1.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation $chart1.Location = New-Object System.Drawing.Point(13,200) $chart1.Name = "chart1" $System_Windows_Forms_DataVisualization_Charting_Series_2 = New-Object System.Windows.Forms.DataVisualization.Charting.Series $System_Windows_Forms_DataVisualization_Charting_Series_2.ChartArea = "ChartArea1" $System_Windows_Forms_DataVisualization_Charting_Series_2.ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie $System_Windows_Forms_DataVisualization_Charting_Series_2.CustomProperties = "DrawingStyle=Cylinder, PieDrawingStyle=Concave" $System_Windows_Forms_DataVisualization_Charting_Series_2.IsVisibleInLegend = $False $System_Windows_Forms_DataVisualization_Charting_Series_2.Legend = "Legend1" $System_Windows_Forms_DataVisualization_Charting_Series_2.Name = "Disk Space" [void]$chart1.Series.Add($System_Windows_Forms_DataVisualization_Charting_Series_2) $chart1.Size = New-Object System.Drawing.Size(575,350) $chart1.TabIndex = 0 $chart1.Text = "chart1" $System_Windows_Forms_DataVisualization_Charting_Title_3 = New-Object System.Windows.Forms.DataVisualization.Charting.Title $System_Windows_Forms_DataVisualization_Charting_Title_3.Alignment = [System.Drawing.ContentAlignment]::TopCenter $System_Windows_Forms_DataVisualization_Charting_Title_3.DockedToChartArea = "ChartArea1" $System_Windows_Forms_DataVisualization_Charting_Title_3.IsDockedInsideChartArea = $False $System_Windows_Forms_DataVisualization_Charting_Title_3.Name = "Title1" $System_Windows_Forms_DataVisualization_Charting_Title_3.Text = "Disk Space" [void]$chart1.Titles.Add($System_Windows_Forms_DataVisualization_Charting_Title_3) # #Save the initial state of the form $InitialFormWindowState = $formDiskSpacePieChart.WindowState #Init the OnLoad event to correct the initial state of the form $formDiskSpacePieChart.add_Load($Form_StateCorrection_Load) #Show the Form return $formDiskSpacePieChart.ShowDialog() } #End Function #Call OnApplicationLoad to initialize if(OnApplicationLoad -eq $true) { #Create the form Call-Disk_Space_Chart_pff | Out-Null #Perform cleanup OnApplicationExit }