Orbit.Teams.psm1

using module Orbit
using module .\Class\Orbit.Teams.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.Teams


#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.psm1 Orbit.Teams.Classes.psm1 or 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