(somewhat) Social
« T-SQL Tuesday #13–A Mysterious Business | Main | UnSQL Friday #1: Branding »
Tuesday
Nov232010

Quick Powershell Disk Space Check

Today I received a request to copy some database backups over to a file share. As a part of performing this process I generally log on to the target first to check that there is sufficient free space to complete the copy. As I was waiting for the server login to complete I knew that there really had to be a better way to do this.

There are lots of tools out there that can get this data however I realized that Powershell could do just this quickly and easily. In less than an hour I had a working function deployed to my profile that I could quickly and easily call to get the information on all disks on a machine.

 

   1: Function DiskSpace ($Servername)
   2: {
   3: GWMI -ComputerName $Servername Win32_LogicalDisk -Filter "DriveType = 3 AND Size > 0" | 
   4:     Select SystemName, 
   5:     @{Label="Drive";Expression={$_.DeviceID}}, 
   6:     VolumeName, 
   7:     @{Label="Size GB";Expression={"{0:N1}" -f($_.size/1GB)}}, 
   8:     @{Label="Free GB";Expression={"{0:N1}" -f($_.freespace/1GB)}} , 
   9:     @{Label="Free Percent";Expression={"{0:N1}" -f(($_.freespace / $_.size) * 100)}} | 
  10:     Out-GridView
  11: }

 

Once added to your profile (for more about profiles check out http://msdn.microsoft.com/en-us/library/bb613488(VS.85).aspx ) it’s a simple case of opening powershell and calling the function along with the machine name.

DiskSpace Server1

You can also provide multiple servers to get results. Just separate the servers with a comma.

DiskSpace Server1,Server2,Server3

 

UPDATE:

Shahryar Hashemi (Twitter) pointed out quite correctly on Twitter that this wouldn't cover mount points (as I only have them on a single machine I hadn't thought to cover that). I've updated the script to use Win32_Volume which gives us information on the mount points. This basic script now won't give you the volume names however it will give you the path to the mount point. 

Code Snippet
  1. Function DiskSpace ($Servername)
  2. {
  3.  
  4. GWMI -ComputerName $Servername Win32_Volume -Filter "DriveType = 3 AND Capacity > 0" |
  5.      Select SystemName,
  6.     @{Label="Drive";Expression={$_.Caption}},
  7.      ##VolumeName,
  8.     @{Label="Size GB";Expression={"{0:N1}" -f($_.Capacity/1GB)}},
  9.     @{Label="Free GB";Expression={"{0:N1}" -f($_.freespace/1GB)}} ,
  10.     @{Label="Free Percent";Expression={"{0:N1}" -f(($_.freespace / $_.Capacity) * 100)}} |
  11.     Out-GridView
  12.  
  13.     
  14.  
  15. }

 

 Also, check out what Dave Levy (blog|twitter) has done with this http://adventuresinsql.com/2010/11/get-drive-space-including-mount-points/

 

UPDATE 2:

Based on the great suggestion by Dave Levy on being able to provide a unit of measure for the function (so it can return capacity and freespace in something other than just GB) here's another updated version of the script. This time pass in the server name and the unit of measure you want to use (KB/MB/GB). If you don't pass in a value it will give you the space information in GB. Just a note, if you pass in something invalid you won't get space information at all. Like I said, quick and dirty, there's no error handling going on here folks.

Code Snippet
  1. Function DiskSpace2 ($Servername, $unit)
  2. {
  3.  
  4. IF (!$unit) {$unit = "GB"}
  5. $measure = "1$unit"
  6.  
  7. GWMI -ComputerName $Servername Win32_Volume -Filter "DriveType = 3 AND Capacity > 0" |
  8.     Select SystemName,
  9.     @{Label="Drive";Expression={$_.Caption}},
  10.     ##VolumeName,
  11.     @{Label="Size $unit";Expression={"{0:N1}" -f($_.Capacity/$measure)}},
  12.     @{Label="Free $unit";Expression={"{0:N1}" -f($_.freespace/$measure)}} ,
  13.     @{Label="Free Percent";Expression={"{0:N1}" -f(($_.freespace / $_.Capacity) * 100)}} |
  14.     Out-GridView
  15.  
  16. }

 

Give it a try, let me know if this comes in useful.

PrintView Printer Friendly Version

EmailEmail Article to Friend

References (6)

References allow you to track sources for this article, as well as articles that were written in response to this article.
  • Response
    English To SQL - English To SQL - Blog - Quick Powershell Disk Space Check
  • Response
    English To SQL - English To SQL - Blog - Quick Powershell Disk Space Check
  • Response
    Response: wasp control
    English To SQL - English To SQL - Blog - Quick Powershell Disk Space Check
  • Response
    English To SQL - English To SQL - Blog - Quick Powershell Disk Space Check
  • Response
    English To SQL - English To SQL - Blog - Quick Powershell Disk Space Check
  • Response
    English To SQL - English To SQL - Blog - Quick Powershell Disk Space Check

Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>