public/connect-M365.ps1
Function connect-M365{ <# Author = "Jos Lieben (jos@lieben.nu)" CompanyName = "Lieben Consultancy" Copyright = "https://www.lieben.nu/liebensraum/commercial-use/" #> Param( [Switch]$Delegated, [Switch]$ServicePrincipal, [Switch]$ManagedIdentity ) $readyToConnect = $True #choose auth mode, env var trumps passed in param, trumps default / persisted from set-M365PermissionsConfig if($ManagedIdentity){ $global:octo.userConfig.authMode = "ManagedIdentity" }elseif($ServicePrincipal){ $global:octo.userConfig.authMode = "ServicePrincipal" }elseif($Delegated){ $global:octo.userConfig.authMode = "Delegated" }elseif($Env:LCAUTHMODE){ $global:octo.userConfig.authMode = $Env:LCAUTHMODE }elseif(!$global:octo.userConfig.authMode){ $global:octo.userConfig.authMode = "Delegated" } #if we're doing delegated auth, use my multi-tenant app id if($global:octo.userConfig.authMode -eq "Delegated"){ Write-LogMessage -message "Using default $($global:octo.userConfig.authMode) authentication..." $global:octo.userConfig.LCClientId = "0ee7aa45-310d-4b82-9cb5-11cc01ad38e4" } #SPN auth requires a clientid and tenantid by the customer either through env vars or set-M365PermissionsConfig if($global:octo.userConfig.authMode -eq "ServicePrincipal"){ Write-LogMessage -message "Using $($global:octo.userConfig.authMode) authentication..." if($Env:LCCLIENTID){ $global:octo.userConfig.LCClientId = $Env:LCCLIENTID } if($Env:LCTENANTID){ $global:octo.userConfig.LCTenantId = $Env:LCTENANTID } if(!$global:octo.userConfig.LCClientId -or !$global:octo.userConfig.LCTenantId){ $readyToConnect = $False Write-Error "Service Principal authentication requires a ClientId and TenantId to be set, please run set-M365PermissionsConfig -LCClientId <clientid> -LCTenantId <tenantid> before connecting or configure LCCLIENTID and LCTENANTID as env variables" -ErrorAction Continue } } #Managed Identity auth requires a tenantid by the customer either through env vars or set-M365PermissionsConfig if($global:octo.userConfig.authMode -eq "ManagedIdentity"){ Write-LogMessage -message "Using $($global:octo.userConfig.authMode) authentication..." } if($readyToConnect){ Write-LogMessage -message "" try{ $global:octo.connection = "Connecting" $global:octo.currentUser = Get-CurrentUser $global:octo.OnMicrosoft = (New-GraphQuery -Method GET -Uri 'https://graph.microsoft.com/v1.0/domains?$top=999' | Where-Object -Property isInitial -EQ $true).id $global:octo.tenantName = $($global:octo.OnMicrosoft).Split(".")[0] $global:octo.sessionIdentifier = "$($global:octo.tenantName)_$((Get-Date).ToString("yyyyMMdd"))" if(!$global:octo.userConfig.outputFolder.EndsWith($global:octo.sessionIdentifier)){ $global:octo.userConfig.outputFolder = "$($global:octo.userConfig.outputFolder)\$($global:octo.sessionIdentifier)" #write config to output folder for reference so each run's settings can be compared if needed if(!(Test-Path -Path $global:octo.userConfig.outputFolder)){ New-Item -Path $global:octo.userConfig.outputFolder -ItemType Directory -Force | Out-Null } Get-M365PermissionsConfig | ConvertTo-Json | Out-File -FilePath "$($global:octo.userConfig.outputFolder)\M365Permissions.config" -Force -Encoding UTF8 } if(!(Test-Path -Path $global:octo.userConfig.outputFolder)){ New-Item -Path $global:octo.userConfig.outputFolder -ItemType Directory -Force | Out-Null } $global:octo.connection = "Connected" }catch{ Throw $_ } Write-LogMessage -message "Authenticated successfully! Here are some examples using this module:" Write-LogMessage -message "" Write-LogMessage -message ">> Get-AllM365Permissions" Write-LogMessage -message ">> Get-AllExOPermissions -includeFolderLevelPermissions" Write-LogMessage -message ">> Get-ExOPermissions -recipientIdentity `$mailbox.Identity -includeFolderLevelPermissions" Write-LogMessage -message ">> Get-SpOPermissions -siteUrl `"https://tenant.sharepoint.com/sites/site`"" Write-LogMessage -message ">> Get-SpOPermissions -teamName `"INT-Finance Department`"" Write-LogMessage -message ">> get-AllSPOPermissions -IncludeOneDriveSites -ExcludeOtherSites" Write-LogMessage -message ">> get-AllEntraPermissions" Write-LogMessage -message ">> get-AllPBIPermissions" Write-LogMessage -message ">> Get-ChangedPermissions" Write-LogMessage -message "" } } |