public/Get-AzToolsAutomationHybridWorker.ps1

function Get-AzToolsAutomationHybridWorker {
    <#
    .SYNOPSIS
        Get Automation Account Hybrid Worker status
    .DESCRIPTION
        Get Azure Automation Account Hybrid Workers and their current status.
        Only returns User hybrid workers (not system)
    .PARAMETER SelectContext
        Optional. Prompt to select the Azure context (tenant/subscription)
    .PARAMETER ThresholdMinutes
        Optional. Number of minutes to allow for last-seen time before considering it a concern.
        Default is 30 minutes.
    .EXAMPLE
        Get-AzToolsAutomationHybridWorker
    .EXAMPLE
        Get-AzToolsAutomationHybridWorker -SelectContext
    .EXAMPLE
        Get-AzToolsAutomationHybridWorker -ThresholdMinutes 45
    .LINK
        https://github.com/Skatterbrainz/aztools/tree/main/docs/Get-AzToolsAutomationHybridWorker.md
    #>

    [CmdletBinding()]
    param (
        [parameter(Mandatory=$False,HelpMessage="Select Azure Context")]
            [switch]$SelectContext,
        [parameter(Mandatory=$False,HelpMessage="Max minutes to consider hybrid worker is offline")]
            [int]$ThresholdMinutes = 30
    )
    if ($SelectContext) { Switch-AzToolsContext }
    if (!$global:AztoolsLastSubscription -or $SelectContext) { Select-AzToolsSubscription }
    if ($global:AzToolsLastSubscription) {
        if (!$global:AzToolsLastResourceGroup -or $SelectContext) { Select-AzToolsResourceGroup }
        if ($global:AzToolsLastResourceGroup) {
            if (!$global:AzToolsLastAutomationAccount -or $SelectContext) { Select-AzToolsAutomationAccount }
            if ($global:AzToolsLastAutomationAccount) {
                $aaname = $AzToolsLastAutomationAccount.AutomationAccountName
                $rgname = $AzToolsLastAutomationAccount.ResourceGroupName
                Write-Verbose "Getting hybrid worker groups"
                $params = @{
                    ResourceGroupName     = $rgname
                    AutomationAccountName = $aaname
                    ErrorAction           = 'Stop'
                }
                Write-Verbose "Filtering on GroupType=User"
                $hwg = Get-AzAutomationHybridRunbookWorkerGroup @params | Where-Object {$_.GroupType -eq 'User'} | Sort-Object Name
                if ($hwg) {
                    Write-Host "Select hybrid worker group" -ForegroundColor Cyan
                    $hwx = $hwg | Select-Object Name, @{l='AutomationAccount';e={$aaname}} | Out-GridView -Title "Select Hybrid Worker Group" -OutputMode Single
                    if ($hwx) {
                        Write-Verbose "Getting hybrid worker details"
                        $params = @{
                            HybridRunbookWorkerGroupName = $hwx.Name
                            ResourceGroupName            = $rgname
                            AutomationAccountName        = $aaname
                        }
                        $hw = Get-AzAutomationHybridRunbookWorker @params | Select-Object WorkerName,WorkerType,@{l='LastSeen';e={$_.LastSeenDateTime.LocalDateTime}},RegisteredDateTime,Ip,Id
                        Write-Verbose "Comparing last-seen datetime values"
                        if ($hw.LastSeen -lt (Get-Date).AddMinutes(-$ThresholdMinutes)) {
                            $stat = "More than $ThresholdMinutes minutes ago"
                        } else {
                            $stat = "Current"
                        }
                        $hw | Select-Object -Property *,@{l='Status';e={$stat}}
                    }
                } else {
                    Write-Host "No user hybrid worker groups were found" -ForegroundColor Yellow
                }
            }
        }
    }
}