I created this function some time ago already when we did not have the SCOM Management Pack for Windows Clusters imported yet.
This script basically scans a Cluster, to scan its current CSV State, and report you the current size/usage/freespace available.
The output of this script can be used to filter out unhealthy volumes, or volumes that are filling up!
Function GetClusterVolumeState{ <# .SYNOPSIS Retrieve information about the Cluster Volume Health .DESCRIPTION The GetClusterVolumeState function retrieves information about the cluster volumes on a certain cluster. This information will show the Cluster, Volume, Health and Disk space. .PARAMETER Clusters One or multiple clusters you would like to retrieve information from .EXAMPLE Retrieve information about the Clustervolumes for Cluster01 RI-GetClusterVolumeState -clusters "Cluster01" .NOTES This script was written by Danny den Braver @2013, for questions please contact danny@denbraver.com #> [CmdletBinding(SupportsShouldProcess=$true)] param([array][Parameter(Mandatory=$true)]$Clusters) foreach ($Cluster in $Clusters){ # Test Connection availability and continue if $true $testconnection = Test-Connection $Cluster -Quiet if ($testconnection -eq $true){ Write-Verbose -Message "Scanning: $Cluster for clusterdisk information" # Get CSV Volumes $CSVDisks = Get-ClusterSharedVolume -Cluster $Cluster foreach ($CSVDisk in $CSVDisks){ # Get CSV VolumeInformation $CSVVolumeInfo = $CSVDisk | Select -Expand SharedVolumeInfo $CSVFriendlyName = $CSVVolumeInfo.FriendlyVolumeName $CSVVolume = ($CSVFriendlyName.Split("\")[2]).ToLower() $CSVState = $CSVDisk.State # Get CSV free space [int]$CSVDiskDriveFreeSpace = ([math]::round((($CSVVolumeInfo | Select -Expand Partition).FreeSpace / 1GB), 0)) # Get CSV total space [int]$CSVDiskSpace = ([math]::round((($CSVVolumeInfo | Select -Expand Partition).Size / 1GB), 0)) # Get CSV used Space [int]$CSVDiskDriveUsedSpace = [int]$CSVDiskSpace - [int]$CSVDiskDriveFreeSpace # Get CSV Health if ($CSVState -eq "Online"){ if ($CSVVolumeInfo.MaintenanceMode -eq $False){ if ($CSVVolumeInfo.RedirectedAccess -eq $True){ $CSVHealth = "Warning" $CSVHealthDetails = 'Volume is in redirected mode.' } else { $CSVHealth = "Healthy" $CSVHealthDetails = 'Volume is healthy.' } } else { $CSVHealth = "Maintenance" $CSVHealthDetails = 'Volume is in maintenance mode."' } } else { $CSVHealth = "Critical" $CSVHealthDetails = 'Volume is in offline state.' } # CSV Output $clustername = $cluster -replace ".eu.rabonet.com","" $clustername | select @{l="Clustername";e={$Clustername}}, @{l="Volume"; e={"$CSVVolume"}}, @{l="DiskSpaceGB"; e={"$CSVDiskSpace"}}, @{l="UsedSpaceGB"; e={"$CSVDiskDriveUsedSpace"}}, @{l="FreeSpaceGB"; e={"$CSVDiskDriveFreeSpace"}}, @{l="Health"; e={"$CSVHealth"}}, @{l="Health Description"; e={"$CSVHealthDetails"}} } } else { Write-Warning "Could not connect to $Cluster" } } }