Public/Get-AnyStackEsxiLockdownMode.ps1
|
function Get-AnyStackEsxiLockdownMode { <# .SYNOPSIS Retrieves the current Lockdown Mode status for ESXi hosts. .DESCRIPTION Queries host configuration for lockdown mode status. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER HostName Filter by host name. .EXAMPLE PS> Get-AnyStackEsxiLockdownMode .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]$HostName ) begin { $vi = Get-AnyStackConnection -Server $Server $ErrorActionPreference = 'Stop' } process { try { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Fetching lockdown status on $($vi.Name)" $filter = if ($HostName) { @{Name="*$HostName*"} } else { $null } $hosts = Invoke-AnyStackWithRetry -ScriptBlock { Get-View -Server $vi -ViewType HostSystem -Filter $filter -Property Name,Config.LockdownMode } foreach ($h in $hosts) { [PSCustomObject]@{ PSTypeName = 'AnyStack.LockdownStatus' Timestamp = (Get-Date) Server = $vi.Name Host = $h.Name LockdownMode = $h.Config.LockdownMode } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(function Get-AnyStackEsxiLockdownMode { <# .SYNOPSIS Retrieves the current Lockdown Mode status for ESXi hosts. .DESCRIPTION Queries host configuration for lockdown mode status. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER HostName Filter by host name. .EXAMPLE PS> Get-AnyStackEsxiLockdownMode .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]$HostName ) begin { $vi = Get-AnyStackConnection -Server $Server $ErrorActionPreference = 'Stop' } process { try { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Fetching lockdown status on $($vi.Name)" $filter = if ($HostName) { @{Name="*$HostName*"} } else { $null } $hosts = Invoke-AnyStackWithRetry -ScriptBlock { Get-View -Server $vi -ViewType HostSystem -Filter $filter -Property Name,Config.LockdownMode } foreach ($h in $hosts) { [PSCustomObject]@{ PSTypeName = 'AnyStack.LockdownStatus' Timestamp = (Get-Date) Server = $vi.Name Host = $h.Name LockdownMode = $h.Config.LockdownMode } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new($_, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } .Exception, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } |