SystemAdmins.MsEntraMfaToolbox.psm1
# Variable for script path. [string]$scriptPath = ''; # If we are running in VSCode, use the PSScriptRoot. if ($null -ne $psEditor) { # Use info from variable psEditor. $scriptPath = Split-Path -Path ($psEditor.GetEditorContext().CurrentFile.Path); } # Else use the current working directory. else { # Use the current working directory. $scriptPath = $PSScriptRoot; } # Set script variable. $Script:scriptPath = $scriptPath; # Paths to the private and public folders. [string]$privatePath = Join-Path -Path $scriptPath -ChildPath 'private'; [string]$publicPath = Join-Path -Path $scriptPath -ChildPath 'public'; # Object array to store all PowerShell files to dot source. $ps1Files = New-Object -TypeName System.Collections.ArrayList; # Get all the files in the src (private and public) folder. $privatePs1Files = Get-ChildItem -Path $privatePath -Recurse -File -Filter *.ps1; $publicPs1Files = Get-ChildItem -Path $publicPath -Recurse -File -Filter *.ps1; # Add the private and public files to the object array. $ps1Files += ($privatePs1Files).FullName; $ps1Files += ($publicPs1Files).FullName; # Loop through each PowerShell file. foreach ($ps1File in $ps1Files) { # If line is empty. if ([string]::IsNullOrEmpty($ps1File)) { # Skip to next line. continue; } # Try to dot source the file. try { # Write to log. Write-Debug -Message ("Dot sourcing the PowerShell file '{0}'" -f $ps1File); # Dot source the file. . $ps1File; } catch { # Throw execption. throw ("Something went wrong while importing the PowerShell file '{0}', the execption is:`r`n{1}" -f $ps1File, $_); } } # Write to log. Write-CustomLog -Message ("Script path is '{0}'" -f $scriptPath) -Level Verbose; # Get all the functions in the public section. $publicFunctions = $publicPs1Files.Basename; # Global variables. ## Module. $script:ModuleName = 'SystemAdmins.MsEntraMfaToolbox'; ## Logging. $script:ModuleTempFolderPath = ('{0}\{1}' -f ([System.IO.Path]::GetTempPath()), $script:ModuleName); $script:ModuleLogFolder = ('{0}\Log' -f $script:ModuleTempFolderPath); $script:ModuleLogFileName = ('{0}_EntraMfaToolbox.log' -f (Get-Date -Format 'yyyyMMddHHmmss')); $script:ModuleLogPath = Join-Path -Path $ModuleLogFolder -ChildPath $ModuleLogFileName; # Test the connection to Entra. $entraConnection = Test-EntraConnection; # If connection is not valid. if ($false -eq $entraConnection) { # Write to log. Write-CustomLog -Message ('Please connect to Entra using the following code') -Level 'Warning' -NoLogLevel $true -NoDateTime; Write-CustomLog -Message ("Connect-Entra -Scopes 'Policy.Read.All', 'GroupMember.Read.All', 'User.Read.All', 'RoleManagement.Read.All', 'Mail.Send' -NoWelcome") -Level 'Warning' -NoLogLevel $true -NoDateTime; Write-CustomLog -Message ('After connecting to Entra, import the module again using the following') -Level 'Warning' -NoLogLevel $true -NoDateTime; Write-CustomLog -Message ('Import-Module -Name "{0}"' -f $script:ModuleName) -Level 'Warning' -NoLogLevel $true -NoDateTime; # throw exception. throw ('No valid connection to Microsoft Entra'); } # Foreach function in the public functions. foreach ($exportFunction in $publicFunctions) { # Write to log. Write-CustomLog -Message ("Exporting the function '{0}'" -f $exportFunction) -Level Verbose; } # Export functions. Export-ModuleMember -Function $publicFunctions; |