Public/Get-AnyStackClusterImage.ps1
|
function Get-AnyStackClusterImage { <# .SYNOPSIS Retrieves vLCM cluster image info. .DESCRIPTION Checks if a cluster is vLCM managed and gets the base image version. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER ClusterName Filter by cluster name. .EXAMPLE PS> Get-AnyStackClusterImage .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)] Fetching cluster images 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) { $vlcmManaged = ($null -ne $c.ConfigurationEx.DesiredSoftwareSpec) $version = if ($vlcmManaged) { $c.ConfigurationEx.DesiredSoftwareSpec.BaseImageSpec.Version } else { 'N/A' } [PSCustomObject]@{ PSTypeName = 'AnyStack.ClusterImage' Timestamp = (Get-Date) Server = $vi.Name Cluster = $c.Name VlcmManaged = $vlcmManaged BaseImageVersion = $version } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(function Get-AnyStackClusterImage { <# .SYNOPSIS Retrieves vLCM cluster image info. .DESCRIPTION Checks if a cluster is vLCM managed and gets the base image version. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER ClusterName Filter by cluster name. .EXAMPLE PS> Get-AnyStackClusterImage .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)] Fetching cluster images 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) { $vlcmManaged = ($null -ne $c.ConfigurationEx.DesiredSoftwareSpec) $version = if ($vlcmManaged) { $c.ConfigurationEx.DesiredSoftwareSpec.BaseImageSpec.Version } else { 'N/A' } [PSCustomObject]@{ PSTypeName = 'AnyStack.ClusterImage' Timestamp = (Get-Date) Server = $vi.Name Cluster = $c.Name VlcmManaged = $vlcmManaged BaseImageVersion = $version } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(function Get-AnyStackClusterImage { <# .SYNOPSIS Retrieves vLCM cluster image info. .DESCRIPTION Checks if a cluster is vLCM managed and gets the base image version. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER ClusterName Filter by cluster name. .EXAMPLE PS> Get-AnyStackClusterImage .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)] Fetching cluster images 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) { $vlcmManaged = ($null -ne $c.ConfigurationEx.DesiredSoftwareSpec) $version = if ($vlcmManaged) { $c.ConfigurationEx.DesiredSoftwareSpec.BaseImageSpec.Version } else { 'N/A' } [PSCustomObject]@{ PSTypeName = 'AnyStack.ClusterImage' Timestamp = (Get-Date) Server = $vi.Name Cluster = $c.Name VlcmManaged = $vlcmManaged BaseImageVersion = $version } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(function Get-AnyStackClusterImage { <# .SYNOPSIS Retrieves vLCM cluster image info. .DESCRIPTION Checks if a cluster is vLCM managed and gets the base image version. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER ClusterName Filter by cluster name. .EXAMPLE PS> Get-AnyStackClusterImage .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)] Fetching cluster images 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) { $vlcmManaged = ($null -ne $c.ConfigurationEx.DesiredSoftwareSpec) $version = if ($vlcmManaged) { $c.ConfigurationEx.DesiredSoftwareSpec.BaseImageSpec.Version } else { 'N/A' } [PSCustomObject]@{ PSTypeName = 'AnyStack.ClusterImage' Timestamp = (Get-Date) Server = $vi.Name Cluster = $c.Name VlcmManaged = $vlcmManaged BaseImageVersion = $version } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new($_, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } .Exception, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } .Exception, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } .Exception, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } |