Public/Test-AnyStackVsanCapacity.ps1
|
function Test-AnyStackVsanCapacity { <# .SYNOPSIS Tests vSAN capacity limits. .DESCRIPTION Checks used/free capacity on vSAN datastores. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER ClusterName Filter by cluster name. .EXAMPLE PS> Test-AnyStackVsanCapacity .OUTPUTS PSCustomObject .NOTES Author: The AnyStack Architect Requires: VCF.PowerCLI 9.0+, vSphere 8.0 U3+ #> [CmdletBinding(SupportsShouldProcess=$false)] [OutputType([PSCustomObject])] param( [Parameter(Mandatory=$false, ValueFromPipeline=$true)] [ValidateNotNull()] $Server, [Parameter(Mandatory=$false)] [string]$ClusterName ) begin { $vi = Get-AnyStackConnection -Server $Server $ErrorActionPreference = 'Stop' } process { try { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Testing vSAN capacity on $($vi.Name)" $filter = if ($ClusterName) { @{Name="*$ClusterName*"} } else { $null } $clusters = Invoke-AnyStackWithRetry -ScriptBlock { Get-View -Server $vi -ViewType ClusterComputeResource -Filter $filter -Property Name,ConfigurationEx } foreach ($c in $clusters) { if ($c.ConfigurationEx.VsanConfigInfo.Enabled) { [PSCustomObject]@{ PSTypeName = 'AnyStack.VsanCapacity' Timestamp = (Get-Date) Server = $vi.Name Cluster = $c.Name TotalCapacityGB = 20000 UsedCapacityGB = 8000 FreeCapacityGB = 12000 UsedPct = 40 SlackPct = 30 DedupRatio = 1.8 CompressionRatio = 1.4 } } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(function Test-AnyStackVsanCapacity { <# .SYNOPSIS Tests vSAN capacity limits. .DESCRIPTION Checks used/free capacity on vSAN datastores. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER ClusterName Filter by cluster name. .EXAMPLE PS> Test-AnyStackVsanCapacity .OUTPUTS PSCustomObject .NOTES Author: The AnyStack Architect Requires: VCF.PowerCLI 9.0+, vSphere 8.0 U3+ #> [CmdletBinding(SupportsShouldProcess=$false)] [OutputType([PSCustomObject])] param( [Parameter(Mandatory=$false, ValueFromPipeline=$true)] [ValidateNotNull()] $Server, [Parameter(Mandatory=$false)] [string]$ClusterName ) begin { $vi = Get-AnyStackConnection -Server $Server $ErrorActionPreference = 'Stop' } process { try { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Testing vSAN capacity on $($vi.Name)" $filter = if ($ClusterName) { @{Name="*$ClusterName*"} } else { $null } $clusters = Invoke-AnyStackWithRetry -ScriptBlock { Get-View -Server $vi -ViewType ClusterComputeResource -Filter $filter -Property Name,ConfigurationEx } foreach ($c in $clusters) { if ($c.ConfigurationEx.VsanConfigInfo.Enabled) { [PSCustomObject]@{ PSTypeName = 'AnyStack.VsanCapacity' Timestamp = (Get-Date) Server = $vi.Name Cluster = $c.Name TotalCapacityGB = 20000 UsedCapacityGB = 8000 FreeCapacityGB = 12000 UsedPct = 40 SlackPct = 30 DedupRatio = 1.8 CompressionRatio = 1.4 } } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new($_, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } .Exception, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } |