Public/Get-MSConnectionStatus.ps1
|
function Get-MSConnectionStatus { <# .SYNOPSIS Gets the current Microsoft 365 connection status. .DESCRIPTION Returns information about the current authentication configuration, connected services, and PowerShell version. .PARAMETER Detailed If specified, includes additional details like credential status. .OUTPUTS PSCustomObject with connection status information. .EXAMPLE Get-MSConnectionStatus .EXAMPLE Get-MSConnectionStatus -Detailed .LINK https://github.com/nikkelly/M365Connect #> [CmdletBinding()] [OutputType([PSCustomObject])] param( [switch]$Detailed ) $versionInfo = $script:MSProfileState.PSVersionInfo $status = [PSCustomObject]@{ ConnectedServices = $script:MSProfileState.ConnectedServices.ToArray() ServiceCount = $script:MSProfileState.ConnectedServices.Count AuthMethod = $script:MSProfileState.AuthMethod User = $script:MSProfileState.MicrosoftUser Domain = $script:MSProfileState.Domain MFAEnabled = $script:MSProfileState.MFAEnabled PSVersion = "$($versionInfo.Major).$($versionInfo.Minor)" PSEdition = $PSVersionTable.PSEdition IsPS7Plus = $versionInfo.RequiresGraph } if ($Detailed) { Add-Member -InputObject $status -NotePropertyName 'CredentialLoaded' -NotePropertyValue ($null -ne $script:MSProfileState.Credential) Add-Member -InputObject $status -NotePropertyName 'AppRegistrationConfigured' -NotePropertyValue ( $null -ne $script:MSProfileState.AppRegistration.AppId -and $null -ne $script:MSProfileState.AppRegistration.TenantId ) Add-Member -InputObject $status -NotePropertyName 'AppId' -NotePropertyValue $script:MSProfileState.AppRegistration.AppId Add-Member -InputObject $status -NotePropertyName 'TenantId' -NotePropertyValue $script:MSProfileState.AppRegistration.TenantId Add-Member -InputObject $status -NotePropertyName 'HasCertificate' -NotePropertyValue ($null -ne $script:MSProfileState.AppRegistration.CertificateThumbprint) Add-Member -InputObject $status -NotePropertyName 'HasClientSecret' -NotePropertyValue ($null -ne $script:MSProfileState.AppRegistration.ClientSecret) } # Display formatted output Write-Host "`n`tMicrosoft 365 Connection Status" -ForegroundColor Cyan Write-Host -Object ("`t" + ("=" * 40)) $foregroundColor = $script:MSProfileState.ForegroundColor # Connected services if ($status.ServiceCount -gt 0) { Write-ColorOutput -Text "`tConnected Services: ", ($status.ConnectedServices -join ', ') -Color $foregroundColor, Green } else { Write-ColorOutput -Text "`tConnected Services: ", "None" -Color $foregroundColor, Yellow } # Auth method $authColor = switch ($status.AuthMethod) { 'ServicePrincipal' { 'Cyan' } 'Credential' { 'Green' } default { 'Yellow' } } Write-ColorOutput -Text "`tAuth Method: ", $status.AuthMethod -Color $foregroundColor, $authColor # User if ($status.User) { Write-ColorOutput -Text "`tUser: ", $status.User -Color $foregroundColor, Green } else { Write-ColorOutput -Text "`tUser: ", "Not configured" -Color $foregroundColor, Yellow } # MFA $mfaColor = if ($status.MFAEnabled) { 'Green' } else { 'Red' } $mfaText = if ($status.MFAEnabled) { 'Enabled' } else { 'Disabled' } Write-ColorOutput -Text "`tMFA Status: ", $mfaText -Color $foregroundColor, $mfaColor # PS Version $psVersionText = "$($status.PSVersion) ($($status.PSEdition))" if ($status.IsPS7Plus) { $psVersionText += " [Graph Mode]" } Write-ColorOutput -Text "`tPowerShell: ", $psVersionText -Color $foregroundColor, Gray if ($Detailed) { Write-Host -Object ("`t" + ("-" * 40)) # Credential status $credColor = if ($status.CredentialLoaded) { 'Green' } else { 'Yellow' } $credText = if ($status.CredentialLoaded) { 'Loaded' } else { 'Not loaded' } Write-ColorOutput -Text "`tCredential: ", $credText -Color $foregroundColor, $credColor # App registration if ($status.AppRegistrationConfigured) { Write-ColorOutput -Text "`tApp Registration: ", "Configured" -Color $foregroundColor, Green Write-ColorOutput -Text "`t App ID: ", $status.AppId -Color $foregroundColor, Gray Write-ColorOutput -Text "`t Tenant: ", $status.TenantId -Color $foregroundColor, Gray $authType = if ($status.HasCertificate) { 'Certificate' } elseif ($status.HasClientSecret) { 'Client Secret' } else { 'None' } Write-ColorOutput -Text "`t Credential Type: ", $authType -Color $foregroundColor, Gray } else { Write-ColorOutput -Text "`tApp Registration: ", "Not configured" -Color $foregroundColor, Yellow } } Write-Host "" return $status } |