functions/Connect-ToAzureInteractively.ps1
Function Connect-ToAzureInteractively { <# .SYNOPSIS Cmdlet for making an interactive connections to an Azure tenant and subscription. .DESCRIPTION Make an interactive connections to an Azure tenant and subscription. If interactive connection fails it will default to a manual connection. .PARAMETER EnableException Disables user-friendly warnings and enables the throwing of exceptions. This is less user friendly, but allows catching exceptions in calling scripts. .EXAMPLE PS c:\> Connect-ToAzureInteractively Make a connection to an Azure tenant. #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '')] [OutputType('System.String')] [CmdletBinding()] param( [switch] $EnableException ) begin { # Can be modified by end user for interactive login to AzureAD and AzureAZ #$TenantID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx' #$ApplicationID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx' $CertThumbprint = (Get-ChildItem cert:\CurrentUser\My\ | Where-Object { $_.Subject -eq "CN=PSServicePrincipal" }).Thumbprint } process { if (-NOT $script:AdSessionFound) { if ($PSVersionTable.PSEdition -eq "Core") { Write-PSFMessage -Level Host -Message "At this time AzureAD PowerShell module does not work on PowerShell Core. Please use PowerShell version 5 or 6." -Once "PS Core Doesn't work with AzureAD" $script:runningOnCore = $true } elseif ($PSVersionTable.PSEdition -eq "Desktop") { try { $script:AdSessionInfo = Connect-AzureAD -TenantId $TenantID -ApplicationId $ApplicationID -CertificateThumbprint $CertThumbprint -ErrorAction Stop Write-PSFMessage -Level Host -Message "Connected to AzureAD with automatic logon" -Once "Automatically connected to AzureAD" $script:AdSessionFound = $true } catch { Write-PSFMessage -Level Host -Message "Automatic logon to AzureAD failed. Defaulting to interactive connection" -Once "Interactive Logon Failed" $script:AdSessionFound = $false try { $Credentials = Get-Credential -Message "Please enter your credentials for Connect-AzureAD" $script:AdSessionInfo = Connect-AzureAD -Credential $Credentials -ErrorAction Stop $script:AdSessionFound = $true Write-PSFMessage -Level Host -Message "Connected to AzureAD successful" -Once "Interactive Logon Successful" } catch { Stop-PSFFunction -Message $_ -Cmdlet $PSCmdlet -ErrorRecord $_ -EnableException $EnableException } } } } if (-NOT $script:AzSessionFound) { try { $script:AzSessionInfo = Connect-AzAccount -ServicePrincipal -TenantId $TenantID -ApplicationId $ApplicationID -CertificateThumbprint $CertThumbprint -ErrorAction Stop Write-PSFMessage -Level Host -Message "Connected to AzureAZ with automatic logon" -Once "Automatically connected to AzureAZ" $script:AzSessionFound = $true } catch { Write-PSFMessage -Level Host -Message "Automatic logon to AzureAZ failed. Defaulting to interactive connection" -Once "Interactive Logon Failed" $script:AzSessionFound = $false try { $Credentials = Get-Credential -Message "Please enter your credentials for Connect-AzAccount" $script:AzSessionInfo = Connect-AzAccount -Credential $Credentials -ErrorAction Stop $script:AzSessionFound = $true Write-PSFMessage -Level Host -Message "Connected to AzureAZ successful" -Once "Interactive Logon Successful" } catch { Stop-PSFFunction -Message $_ -Cmdlet $PSCmdlet -ErrorRecord $_ -EnableException $EnableException } } } } } |