Windows Server 2012 File Server Tip: Use PowerShell to find the free space on the volume behind an SMB file share


A while back, I showed how to use PowerShell V2 and our old SMB WMIv1 object to explain how to find the free space behind a file share (essentially the free space for the volume that contains the file share). That post is available at http://blogs.technet.com/b/josebda/archive/2010/04/08/using-powershell-v2-to-gather-info-on-free-space-on-the-volumes-of-your-remote-file-server.aspx. While that post was a good example of how to construct a more elaborate solution using PowerShell, it was a little complicated :-).

Now, with Windows Server 2012, PowerShell V3 and SMB PowerShell, things got much simpler. I can essentially do the same thing with a simple one-liner.

For instance, to see the free space on the volume behind a specific share named TEST, you can use

Get-Volume -Id (Get-SmbShare TEST).Volume

To list the volumes for all shares on a specific server, you can use:

Get-SmbShare | ? Volume -ne $null | % { $_ | FL ; Get-Volume -Id $_.Volume | FL }

Note that you can also execute those remotely, pointing to the server where the shares are located:

Get-Volume  -CimSession Server1 -Id (Get-SmbShare TEST -CimSession Server1).Volume

Get-SmbShare -CimSession Server1 | ? Volume  -ne $null | % { $_ | FL ; Get-Volume -CimSession Server1 -Id $_.Volume | FL  }

Here is a complete example, with output. First a simple query to find the information for a volume behind a share

PS C:> Get-Volume -Id (Get-SmbShare VMS1).Volume

DriveLetter       FileSystemLabel  FileSystem       DriveType        HealthStatus        SizeRemaining             Size
———–       —————  ———-       ———        ————        ————-             —-
I                                  NTFS             Fixed            Healthy                  78.85 GB           100 GB

PS C:> Get-Volume -Id (Get-SmbShare Projects).Volume | Select *

HealthStatus          : Healthy
DriveType             : Fixed
DriveLetter           :
FileSystem            : CSVFS
FileSystemLabel       :
ObjectId              : \?Volume{20795fea-b7da-43dd-81d7-4d346c337a73}
Path                  : \?Volume{20795fea-b7da-43dd-81d7-4d346c337a73}
Size                  : 107372081152
SizeRemaining         : 85759995904
PSComputerName        :
CimClass              : ROOT/Microsoft/Windows/Storage:MSFT_Volume
CimInstanceProperties : {DriveLetter, DriveType, FileSystem, FileSystemLabel…}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties

Now a more complete query, showing all shares starting with VMS and information on the volume behind them:

PS C:> Get-SmbShare VMS* | ? Volume -ne $null | % { $_ | FL ; Get-Volume -Id $_.Volume | FL }

Name        : VMS1
ScopeName   : FST2-FS
Path        : I:VMS
Description :

DriveLetter     : I
DriveType       : Fixed
FileSystem      : NTFS
FileSystemLabel :
HealthStatus    : Healthy
ObjectId        : \?Volume{b02c4ba7-e6f1-11e1-93eb-0008a1c0ef0d}
Path            : \?Volume{b02c4ba7-e6f1-11e1-93eb-0008a1c0ef0d}
Size            : 107372081152
SizeRemaining   : 84665225216
PSComputerName  :

Name        : VMS2
ScopeName   : FST2-FS
Path        : J:VMS
Description :

DriveLetter     : J
DriveType       : Fixed
FileSystem      : NTFS
FileSystemLabel :
HealthStatus    : Healthy
ObjectId        : \?Volume{b02c4bb1-e6f1-11e1-93eb-0008a1c0ef0d}
Path            : \?Volume{b02c4bb1-e6f1-11e1-93eb-0008a1c0ef0d}
Size            : 107372081152
SizeRemaining   : 84665225216
PSComputerName  :

Name        : VMS3
ScopeName   : FST2-SO
Path        : C:ClusterStorageVolume1VMS
Description :

DriveLetter     :
DriveType       : Fixed
FileSystem      : CSVFS
FileSystemLabel :
HealthStatus    : Healthy
ObjectId        : \?Volume{20795fea-b7da-43dd-81d7-4d346c337a73}
Path            : \?Volume{20795fea-b7da-43dd-81d7-4d346c337a73}
Size            : 107372081152
SizeRemaining   : 85759995904
PSComputerName  :

Name        : VMS4
ScopeName   : FST2-SO
Path        : C:ClusterStorageVolume2VMS
Description :

DriveLetter     :
DriveType       : Fixed
FileSystem      : CSVFS
FileSystemLabel :
HealthStatus    : Healthy
ObjectId        : \?Volume{fb69e20a-5d6a-4dc6-a0e9-750291644165}
Path            : \?Volume{fb69e20a-5d6a-4dc6-a0e9-750291644165}
Size            : 107372081152
SizeRemaining   : 84665225216
PSComputerName  :

Name        : VMS5
ScopeName   : *
Path        : D:VMS
Description :

DriveLetter     : D
DriveType       : Fixed
FileSystem      : NTFS
FileSystemLabel : LocalFS1
HealthStatus    : Healthy
ObjectId        : \?Volume{58a38e4e-e2fd-11e1-93e8-806e6f6e6963}
Path            : \?Volume{58a38e4e-e2fd-11e1-93e8-806e6f6e6963}
Size            : 181336535040
SizeRemaining   : 136311140352
PSComputerName  :

Finally, not for the faint of heart, a more complex query from a remote file server which creates a custom result combining share information and volume information:

PS C:> Get-SmbShare -CimSession FST2-FS2 | ? Volume  -ne $null | % { $R = “” | Select Share, Path, Size, Free; $R.Share=$_.Name; $R.Path=$_.Path; Get-Volume -CimSession FST2-FS2 -Id $_.Volume | % { $R.Size=$_.Size; $R.Free=$_.SizeRemaining; $R | FL }}


Share : ADMIN$
Path  : C:Windows
Size  : 68352471040
Free  : 44692242432

Share : C$
Path  : C:
Size  : 68352471040
Free  : 44692242432

Share : ClusterStorage$
Path  : C:ClusterStorage
Size  : 68352471040
Free  : 44692242432

Share : D$
Path  : D:
Size  : 181336535040
Free  : 177907777536

Share : Projects
Path  : C:ClusterStorageVolume1SHARESPROJECTS
Size  : 107372081152
Free  : 85759995904

Share : VMFiles
Path  : C:ClusterStorageVolume1VMFiles
Size  : 107372081152
Free  : 85759995904

Share : VMS3
Path  : C:ClusterStorageVolume1VMS
Size  : 107372081152
Free  : 85759995904

Share : VMS4
Path  : C:ClusterStorageVolume2VMS
Size  : 107372081152
Free  : 84665225216

Share : Witness
Path  : C:ClusterStorageVolume1Witness
Size  : 107372081152
Free  : 85759995904

Comments (1)

  1. Anonymous says:

    In this post, I’m providing a reference to the most relevant content related to Windows Server 2012