monkey365.psm1

#Set-StrictMode -Off #-Version Latest
Set-StrictMode -Version Latest

$LocalizedDataParams = @{
    BindingVariable = 'message';
    FileName = 'localized.psd1';
    BaseDirectory = "{0}/{1}" -f $PSScriptRoot, "core/utils";
}
#Import localized data
Import-LocalizedData @LocalizedDataParams;

$msal_modules = @(
    'core/modules/monkeycloudutils'
)
$msal_modules.ForEach({Import-Module ("{0}{1}{2}" -f $PSScriptRoot,[System.IO.Path]::DirectorySeparatorChar, $_.ToString()) -Scope Global -Force})

$internal_modules = @(
    'core/modules/monkeylogger',
    'core/modules/monkeyutils',
    'core/modules/monkeyhttpwebrequest'
    'core/modules/psmarkdig',
    'core/modules/monkeyhtml',
    'core/modules/monkeyjob',
    'core/modules/monkeyruleset',
    'core/modules/psocsf',
    'core/modules/monkeyOutput'
)
$internal_modules.ForEach({Import-Module ("{0}{1}{2}" -f $PSScriptRoot,[System.IO.Path]::DirectorySeparatorChar, $_.ToString()) -Force})

New-Variable -Name ScriptPath -Value $PSScriptRoot -Scope Script -Force

#Get Azure plugins
$cmds = [System.IO.Directory]::EnumerateFiles(("{0}/core/collector" -f $PSScriptRoot),"*.ps1",[System.IO.SearchOption]::AllDirectories)
$modules = @(
    ("{0}/core/modules/monkeyutils" -f $PSScriptRoot)
)
$p = @{
    ScriptBlock = {Get-MonkeySupportedService -Azure};
    ImportCommands = $cmds;
    ImportModules = $modules;
    ImportVariables = @{"ScriptPath" = $PSScriptRoot};
}
[void](Start-MonkeyJob @p)
Get-MonkeyJob | Wait-MonkeyJob
$azure_plugins = Get-MonkeyJob | Receive-MonkeyJob
#Remove Job
Get-MonkeyJob | Remove-MonkeyJob
New-Variable -Name azure_plugins -Value $azure_plugins -Scope Script -Force
#Get Microsoft 365 plugins
$p = @{
    ScriptBlock = {Get-MonkeySupportedService -Microsoft365};
    ImportModules = $modules;
    ImportCommands = $cmds;
    ImportVariables = @{"ScriptPath" = $PSScriptRoot};
}
[void](Start-MonkeyJob @p)
Get-MonkeyJob | Wait-MonkeyJob
$m365_plugins = Get-MonkeyJob | Receive-MonkeyJob
New-Variable -Name m365_plugins -Value $m365_plugins -Scope Script -Force
#Remove Job
Get-MonkeyJob | Remove-MonkeyJob

$internal_functions = @(
    '/core/init',
    '/core/utils',
    '/core/collector',
    '/core/api/auth',
    '/core/html',
    '/core/tasks',
    '/core/analysis',
    '/core/import',
    '/core/output',
    '/core/watcher',
    '/core/api/EntraID/msgraph',
    '/core/tenant',
    '/core/subscription',
    '/core/api/azure',
    '/core/api/EntraID/graph/api',
    '/core/api/EntraID/graph/helpers/user',
    '/core/api/azure/resourcemanagement/api',
    '/core/api/azure/resourcemanagement/helpers/tenant',
    '/core/api/m365/MicrosoftTeams/',
    '/core/api/m365/ExchangeOnline/'
    '/core/api/m365/SharePointOnline/',
    '/core/api/m365/M365AdminPortal/'
)

$all_files = $internal_functions.ForEach({
    If([System.IO.Directory]::Exists(("{0}{1}" -f $PSScriptRoot,$_))){
        [System.IO.Directory]::EnumerateFiles(("{0}{1}" -f $PSScriptRoot,$_),"*.ps1",[System.IO.SearchOption]::AllDirectories)
    }
})
$all_files = $all_files.Where({$_.EndsWith('ps1')})
$all_files.ForEach({. $_})

$monkey = ("{0}/Invoke-Monkey365.ps1" -f $PSScriptRoot)
. $monkey