Public/08_Security/Get-VBAzureADJoinStatusSimple.ps1

# ============================================================
# FUNCTION : Get-VBAzureADJoinStatusSimple
# VERSION : 1.0.2
# CHANGED : 10-04-2026 -- Initial VB-compliant release
# AUTHOR : Vibhu Bhatnagar
# PURPOSE : Simple yes/no Azure AD join status indicator
# ENCODING : UTF-8 with BOM
# ============================================================

<#
.SYNOPSIS
    Simple Azure AD join status check from target computer(s).
 
.DESCRIPTION
    Quick check for Azure AD join status. Returns simple Joined or Not Joined
    status via PSCustomObject. Does not return full dsregcmd output details.
 
.PARAMETER ComputerName
    Target computer(s). Defaults to local machine. Accepts pipeline input.
    Aliases: Name, Server, Host
 
.PARAMETER Credential
    Alternate credentials for remote execution.
 
.EXAMPLE
    Get-VBAzureADJoinStatusSimple
    Checks local computer's Azure AD join status.
 
.EXAMPLE
    Get-VBAzureADJoinStatusSimple -ComputerName SERVER01
    Checks SERVER01's Azure AD join status.
 
.EXAMPLE
    'SERVER01', 'SERVER02' | Get-VBAzureADJoinStatusSimple
    Checks multiple computers via pipeline.
 
.OUTPUTS
    [PSCustomObject]: ComputerName, Status, CollectionTime
 
.NOTES
    Version : 1.0.2
    Author : Vibhu Bhatnagar
    Modified : 10-04-2026
    Category : Security
#>


function Get-VBAzureADJoinStatusSimple {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [Alias('Name', 'Server', 'Host')]
        [string[]]$ComputerName = $env:COMPUTERNAME,
        [PSCredential]$Credential
    )
    process {
        foreach ($computer in $ComputerName) {
            try {
                # Step 1 -- Define remote script block
                $scriptBlock = {
                    $statusOutput = dsregcmd /status 2>&1
                    if ($statusOutput) {
                        return $true
                    } else {
                        return $false
                    }
                }

                # Step 2 -- Execute locally or remotely
                if ($computer -eq $env:COMPUTERNAME) {
                    $isJoined = & $scriptBlock
                } else {
                    $splat = @{
                        ComputerName = $computer
                        ScriptBlock = $scriptBlock
                    }
                    if ($Credential) {
                        $splat['Credential'] = $Credential
                    }
                    $isJoined = Invoke-Command @splat
                }

                # Step 3 -- Output result
                [PSCustomObject]@{
                    ComputerName = $computer
                    Status = if ($isJoined) { 'Joined' } else { 'Not Joined' }
                    CollectionTime = (Get-Date).ToString('dd-MM-yyyy HH:mm:ss')
                }
            }
            catch {
                [PSCustomObject]@{
                    ComputerName = $computer
                    Status = 'Failed'
                    Error = $_.Exception.Message
                    CollectionTime = (Get-Date).ToString('dd-MM-yyyy HH:mm:ss')
                }
            }
        }
    }
}