public/maester/azuredevops/Test-AzdoOrganizationOwner.ps1

<#
.SYNOPSIS
    Returns a boolean depending on the configuration.

.DESCRIPTION
    Checks if the Azure DevOps Organization owner is a individual or a service/admin account.
    Returns a true boolean if the users matches adm|admin|btg|svc|service.

    https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/change-organization-ownership?view=azure-devops

.EXAMPLE
    ```
    Test-AzdoOrganizationOwner
    ```

    Returns a boolean depending on the configuration.

.LINK
    https://maester.dev/docs/commands/Test-AzdoOrganizationOwner
#>

function Test-AzdoOrganizationOwner {
    [CmdletBinding()]
    [OutputType([bool])]
    param()

    if ($null -eq (Get-ADOPSConnection)['Organization']) {
        Write-Verbose 'Not connected to Azure DevOps'
        Add-MtTestResultDetail -SkippedBecause Custom -SkippedCustomReason 'Not connected to Azure DevOps'
        return $null
    }

    $Data = Get-ADOPSOrganizationAdminOverview
    if ($data.'ms.vss-admin-web.organization-admin-overview-delay-load-data-provider'.exceptionType -eq 'AadGraphException') {
        $resultMarkdown = "Workload identities cannot fetch Organization Owner."
        Add-MtTestResultDetail -Result $resultMarkdown -SkippedCustomReason "Workload identities cannot fetch Organization Owner." -SkippedBecause Custom
        $result = $null
    } else {
        $currentOwner = $data.'ms.vss-admin-web.organization-admin-overview-delay-load-data-provider'.currentOwner
        if ($currentOwner.email -match '(?i)(adm|admin|btg|svc|service)') {
            $resultMarkdown = "Azure DevOps organization owner should be a service account and not an individual.`n`n%TestResult%"
            $result = $true
        } else {
            $resultMarkdown = "Azure DevOps organization owner should not be an individual ($($currentOwner.name)). Note: This might be a false positive.`n`n%TestResult%"
            $result = $false
        }
        $markdown = "| Name | Id | E-mail |`n"
        $markdown += "| --- | --- | --- |`n"
        $markdown += "| $($currentOwner.name) | $($currentOwner.id) | $($currentOwner.email) |`n"
        $resultMarkdown = $resultMarkdown -replace '%TestResult%', $markdown
        Add-MtTestResultDetail -Result $resultMarkdown
    }
    return $result
}