Blog Post

PowerSQL – Different Approaches to Find Free Space in all disk drives

,

Different ways to find FreeSpace  in all disk drives of a given server

  • T-SQL
  • Using WMIObject
  • Counters

All three methods are explained below

This post illustrates the simplest way of doing anything with ease using Powershell. I hope everyone agree with it.

Download the code here Code- DiskSpaceUsageDetails

TSQL

TSQL

/* Enable Ole and XP_CMDShell object*/

—- Allow advanced options to be changed.

sp_configure ‘show advanced options’, 1;

GO

– To update the currently configured value for advanced options.

RECONFIGURE;

GO

– To enable the feature.

sp_configure ‘Ole Automation Procedures’, 1;

Go

EXEC sp_configure ‘xp_cmdshell’, 1

GO

– To update the currently configured value for this feature without restarting of your sql instance

RECONFIGURE;

GO

DECLARE @hr INT ,

@fso INT,

@drive CHAR(1),

@odrive INT,

@TotalSize VARCHAR(20),

@MB NUMERIC ,

@FreeSpace INT,

@free INT,

@RowId_1 INT,

@LoopStatus_1 SMALLINT,

@TotalSpace VARCHAR(10),

@Percentage VARCHAR(3)

——————————————————————————————-

–Table to Store Drive related information

——————————————————————————————-

CREATE TABLE #drives

(

id INT IDENTITY(1,1) PRIMARY KEY,

drive CHAR(1),

FreeSpaceMB INT ,

TotalSizeMB INT NULL,

percentage INT

)

——————————————————————————————-

–Inserting the output of xp_fixeddrives to #SpaceSize Table

——————————————————————————————-

INSERT #drives(drive,FreeSpaceMB) EXEC master.dbo.xp_fixeddrives

——————————————————————————————-

–Using the sp_OACreate, sp_OAMethod and sp_OAGetProperty system stored

–procedures to create Ole Automation (ActiveX) applications that can do

–everything an ASP script can do*/

–Creates an instance of the OLE object

——————————————————————————————-

EXEC @hr=sp_OACreate ‘Scripting.FileSystemObject’,@fso OUT

SET @MB = 1048576

SET @RowId_1 = 1

SET @LoopStatus_1 = 1

——————————————————————————————-

–To Get Drive total space

——————————————————————————————-

WHILE (@LoopStatus_1 <> 0) BEGIN

SELECT

@drive=drive,

@FreeSpace=FreeSpaceMB

FROM

#drives

WHERE

( ID = @RowId_1 )

IF ( @@ROWCOUNT = 0 )

BEGIN

SET @LoopStatus_1 = 0

END

ELSE

BEGIN

EXEC @hr = sp_OAMethod @fso,’GetDrive’, @odrive OUT, @drive

EXEC @hr =sp_OAGetProperty @odrive,’TotalSize’, @TotalSize OUT

UPDATE #drives SET TotalSizeMB=@TotalSize/@MB

WHERE

drive=@drive

UPDATE #drives SET Percentage=(@FreeSpace/(TotalSizeMB*1.0))*100.0

WHERE drive=@drive

END

SET @RowId_1 = @RowId_1 + 1

END

SELECT drive,FreeSpaceMB/1024.00 FreeSpaceGB,TotalSizeMB/1024.00 TotalSizeGB,Percentage [FreeSpace %] FROM #drives

DROP TABLE #drives

Output -

DiskSpaceDetails-1

Using Get-WMIObject

$serverName=’AQDBPS8′#Change input Server Name

Get-WmiObject win32_logicalDisk -ComputerName $ServerName |

select DeviceID,VolumeName,

@{Expression={$_.Size /1Gb -as [int]};Label=”Total Size(GB)”},

@{Expression={($_.Size /1Gb -as [int]) – ($_.Freespace / 1Gb -as [int])};Label=”InUse Size (GB)”} ,

@{Expression={$_.Freespace / 1Gb -as [int]};Label=”Free Size (GB)”},

@{Expression={(($_.Freespace /1Gb -as [float]) / ($_.Size / 1Gb -as [float]))*100};Label=”FreeSpace (%)”} |ft -AutoSize

Output :

DiskSpaceDetails-2

Invoke Get-Counters cmdlet

$serverName=’HQDBSP18′

get-counter -computername $serverName -counter “\LogicalDisk(*)\% free space”

DiskSpaceDetails-3

Thanks for reading my space. More to come….

Happy learning!!!

Rate

★ ★ ★ ★ ★ ★ ★ ★ ★ ★

You rated this post out of 5. Change rating

Share

Share

Rate

★ ★ ★ ★ ★ ★ ★ ★ ★ ★

You rated this post out of 5. Change rating