Orbit.Users.psm1
using module Orbit using module .\Class\Orbit.Users.Classes.psm1 # Above needs to remain the first line to import Classes # remove the comment when using classes #requires -Version 5 Import-Module Microsoft.Graph.Users #Get public and private function definition files. $Public = @( Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -Recurse -ErrorAction SilentlyContinue ) $Private = @( Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -Recurse -ErrorAction SilentlyContinue ) #Get parent private function definition files for dot-sourcing $ModuleRoot = $PSScriptRoot | Split-Path $RootModulePrivate = @( Get-ChildItem -Path $ModuleRoot\Orbit\Private\*.ps1 -Recurse -ErrorAction SilentlyContinue ) #region Functions #Dot source the files Foreach ($Function in @($Public + $Private + $RootModulePrivate)) { Try { . $Function.Fullname } Catch { Write-Error -Message "Failed to import function $($Function.Fullname): $_" } } # Exporting Module Members (Functions) Export-ModuleMember -Function $Public.Basename #endregion #region Aliases # Query Aliases $Aliases = $null #$Aliases = Foreach ($Function in @($Public + $Private)) { $Aliases = Foreach ($Function in @($Public)) { if ( $($Function.Fullname) -match '.tests.ps1' ) { continue } $Content = $AliasBlocks = $null $Content = $Function | Get-Content $AliasBlocks = $Content -split "`n" | Select-String 'Alias\(' -Context 1, 1 $AliasBlocks | ForEach-Object { $Lines = $($_ -split "`n") if ( $Lines[0] -match 'CmdletBinding' -or $Lines[0] -match 'OutputType' -or $Lines[2] -match 'CmdletBinding' -or $Lines[2] -match 'OutputType' ) { if ( $($_ -split "`n")[1] -match "Alias\('(?<content>.*)'\)" ) { $($matches.content -split ',' -replace "'" -replace ' ') | ForEach-Object { if ( $_ -ne '' ) { $_ } } } } else { continue } } } # Manual definitions $ManualAliases = @() # Exporting Module Members (Aliases) $AliasesToExport = @($Aliases + $ManualAliases) Write-Verbose -Message "Aliases to Export - Count: $($Aliases.Count)" Write-Verbose -Message "Aliases to Export - List: $($Aliases -join ',')" if ( $AliasesToExport ) { Export-ModuleMember -Alias $AliasesToExport } #endregion #region Variables #endregion #region Custom Module Functions # Regex Match Strings #CHECK these are added in every module to have uniformity. Adding them to Orbit.Classes.psm1 did not work! [regex]$script:OrbitRegexGuid = '^[0-9a-f]{8}-([0-9a-f]{4}\-){3}[0-9a-f]{12}$' [regex]$script:OrbitRegexPhoneNumber = '^(tel:\+|\+)?([0-9]?[-\s]?(\(?[0-9]{3}\)?)[-\s]?([0-9]{3}[-\s]?[0-9][-\s]?[0-9]{3})|([0-9][-\s]?){4,20})((x|;ext=)([0-9]{3,8}))?$' [regex]$script:OrbitRegexCommonEmergencyNumber = '^(000|1(\d{2})|9(\d{2})|\d{1}11)$' [regex]$script:OrbitRegexAudioFileExtension = '.(wav|wma|mp3)$' [regex]$script:OrbitRegexIUTMisconfigured = 'Disabled|OnPrem|NotLicensedForService|WithNoService|WithMCOValidationError|NotInPDL|Failed|PendingDeletionFromAD' [regex]$script:OrbitRegexChannelGuid = '^(19:)([0-9a-f]{32}|[a-zA-Z0-9-_]{44})(@thread.)(skype|tacv2|([0-9a-z]{5}))$' [regex]$script:OrbitRegexUPN = '^(?:([^@ ]+)@([^@ ]+)\.([^@ ]+))$' #endregion |