PowerShell – Disk Space GUI Tool

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

Image

When we made a wrong entries, message box will popup.

Image

Right server will lead to a grid with data populated along with graph which represents its usage

Image

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 
}
Advertisements

About Prashanth Jayaram

I’m a Database technologist having 11+ years of rich, hands-on experience on Database technologies. I am Microsoft Certified Professional and backed with a Degree in Master of Computer Application. My expertise lies in T-SQL programming, Replication and PowerShell You can connect me via https://social.technet.microsoft.com/profile/prashanth jayaram/ http://www.sqlshack.com/author/prashanth/ https://www.tumblr.com/blog/prashantjayaram http://www.sqlservercentral.com/blogs/powersql-by-prashanth-jayaram/ http://www.toadworld.com/members/prashanthjayaram/ My Articles are published in following sites http://www.ssas-info.com/analysis-services-articles/ http://db-pub.com/ http://www.sswug.org/sswugresearch/community/
This entry was posted in Uncategorized and tagged , . Bookmark the permalink.

21 Responses to PowerShell – Disk Space GUI Tool

  1. Pingback: Copy/Transfer file using Powershell | Lance's IT Journal

  2. Pingback: How to find OS start time with Powershell | Lance's IT Journal

  3. Ken says:

    Thanks for the code. When I run PowerShell I do Shift-RightClick on Windows PowerShell ISE and select “Run as a different User” and specify my administrator account. I need to do this as our corporate security has us use a normal user account “Ken” on our desktops and an administrator account “A-Ken” on servers. When I run your code the graphs appear normally but the disk details are missing. The output window of PowerShell ISE contains the following errors:

    Method invocation failed because [System.Management.Automation.PSObject] doesn’t contain a method named ‘op_Addition’.
    At line:279 char:1
    + $Object += New-Object PSObject -Property @{Name= $Computer.ToUpper();DeviceID= $ …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

    My administrator account has access to the servers I’ve tested your application with so I’m not sure where the problem is. Do you have any suggestions on what’s wrong?

    Ken

    • Can you copy and paste the below code and run it in PowerShell-ISE?

      ************************************************
      function Get-DiskDetails
      {
      param(
      [string[]]$ComputerName = “$ENV:COMPUTERNAME”
      )
      $script:Object =@()
      $script: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| where {$_.DeviceID -ne “A:” -and $_.DeviceID -ne “D:”}
      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
      }

      Get-DiskDetails
      ************************************************************

    • The code is updated. Please use the latest code and let me know in case of any issues.

      Thanks for letting me know – Prashanth

      • Ken says:

        Sorry, I hate to be a pain but I’ve found another problem. I have a server with three local disks (C:, D:, and E:) plus a DVD drive (F:). There is no disk in the DVD drive at this time. When I run your code, I see the Disk Details grid for C:, E: and F: – for some reason D: is missing. I have confirmed that the numbers (Size, InUse, etc) are all correct – it is just that one drive is missing. Oddly, the graph section works perfectly and shows data for drives C:, D: and E: with the correct size information. F: is missing but that’s OK since there really is no F: without a disk loaded.

        I connected to a second server with two local drives (C: and D:), two drives connecting to a SAN (F: and G:) and an empty DVD drive (J:). (There is no E: drive.) The Disk Details section shows C:, F:, G: and J:. Drives D: is are missing. Like the first server, the graph section works perfectly and shows for the disks (C:, D:, F: and G:) and not the DVD drive (F:). I have confirmed that all values displayed are correct.

        In both cases the Disk Details section has missed the second drive. Can you look into this please?

        Ken

      • Just modify this piece of code like below

        Current code –
        $D=Get-WmiObject win32_logicalDisk -ComputerName $Computer |select-object DeviceID, VolumeName,FreeSpace,Size| where {$_.DeviceID -ne “A:” -and $_.DeviceID -ne “D:”}

        Modified code:-

        $D=Get-WmiObject win32_logicalDisk -ComputerName $Computer |select-object DeviceID, VolumeName,FreeSpace,Size| where {$_.DeviceID -ne “A:” }

      • I’ve updated the code…use this new version. Let me know in case of any issues – Prashanth

  4. Ken says:

    That fixed it. Just one more set of recommendations that I think will make the output look a little better… The columns of the Disk Details section are:

    InUseGB, Name, VolumeName, SizeGB, FreeSpaceGB, DeviceID, PercentageGB

    I would suggested that the column headings be changed as follows:
    > “InUseGB” be changed to “UsedGB”
    > “Name” be changed to “Server”
    > “SizeGB” be changed to “TotalGB”
    > “FreeSpaceGB” be changed to “FreeGB”
    > “PertentageGB” be change “PercentFree”

    Finally, I suggest the order of the columns be changed so they appear as:

    Server, DeviceID, VolumeName, TotalGB, UsedGB, FreeGB, PercentFree

    Thanks for the code – it is very useful app you’ve written.

    Ken

  5. site says:

    Great delivery. Great site justifications. Maintain the amazing work.

    This particular post site is priceless.
    Where could I learn more?

  6. botox Radom says:

    Hi there, botox Radom merely wanted to tell you, I liked this post botox Radom.
    It had been helpful botox Radom. Carry on submitting!

  7. Incredible points. Outstanding /fans/AnnaR1982R/discussion transport medyczny Kraków questions.

    Keep up the good work.

    This kind of text transport medyczny Lublin is priceless.
    Where may I read more?

  8. strony www says:

    Hi, strony www simply wanted to mention, I liked this blog post strony www.
    This had been helpful strony www. Continue
    publishing!

  9. 6454 says:

    What’s up, 6454 I would like to say, I enjoyed this post 51655.

    It was pretty inspiring p10706. Continue posting!

  10. Hi there, transport medyczny Szczecin merely wanted to mention, I enjoyed this post transport medyczny Szczecin.
    That it was inspiring transport medyczny Szczecin. Keep going publishing!

  11. Shivaprasad Namani says:

    Can we have a list of computers in a excel/txt and the output grid data of all the listed computers to the same excel by grouping them

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s