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