Public/Run-ADModuleTasksFromConfig.ps1

<#
.SYNOPSIS
Executes Active Directory automation tasks based on the configuration defined in a JSON file.
 
.DESCRIPTION
This function serves as a centralized runner for multiple AD-related automation tasks such as:
- Adding users to distribution lists
- Removing users from distribution lists
- Generating line manager reports
- Generating group membership reports
 
Each task is optional and controlled via a JSON config file. Domains and other shared settings are managed through that config.
 
.PARAMETER ConfigFile
Path to the JSON configuration file containing the task definitions and parameters.
 
.EXAMPLE
Run-ADModuleTasksFromConfig -ConfigFile "C:\Configs\ADTasksConfig.json"
#>


function Run-ADModuleTasksFromConfig {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$ConfigFile
    )

    # Load configuration from JSON
    $config = Get-Content -Path $ConfigFile | ConvertFrom-Json
    $domains = $config.Domains

    Write-Host "`n[+] Loaded configuration from $ConfigFile" -ForegroundColor Cyan

    # Add Users to Distribution Lists
    if ($config.AddUsersToDL) {
        Write-Host "`n[+] Running: Add-UsersToDistributionLists" -ForegroundColor Green
        Add-UsersToDistributionLists -InputFile    $config.AddUsersToDL.InputFile `
                                     -GroupColumn  $config.AddUsersToDL.GroupColumn `
                                     -EmailColumn  $config.AddUsersToDL.EmailColumn `
                                     -LogPrefix    $config.AddUsersToDL.LogPrefix `
                                     -LogLocation  $config.AddUsersToDL.LogLocation `
                                     -Domains      $domains
    }

    # Remove Users from Distribution Lists
    if ($config.RemoveUsersFromDL) {
        Write-Host "`n[+] Running: Remove-UsersFromDistributionLists" -ForegroundColor Green
        Remove-UsersFromDistributionLists -InputFile    $config.RemoveUsersFromDL.InputFile `
                                          -GroupColumn  $config.RemoveUsersFromDL.GroupColumn `
                                          -EmailColumn  $config.RemoveUsersFromDL.EmailColumn `
                                          -LogPrefix    $config.RemoveUsersFromDL.LogPrefix `
                                          -LogLocation  $config.RemoveUsersFromDL.LogLocation `
                                          -Domains      $domains
    }

    # Line Manager Report
    if ($config.LineManagerReport) {
        Write-Host "`n[+] Running: Get-LineManagerReport" -ForegroundColor Green
        Get-LineManagerReport -InputCsvFile     $config.LineManagerReport.InputCsvFile `
                              -EmailColumn      $config.LineManagerReport.EmailColumn `
                              -DepartmentColumn $config.LineManagerReport.DepartmentColumn `
                              -Domains          $domains
    }

    # Group Member Report (can handle multiple CSVs)
    if ($config.GroupMemberReport) {
        Write-Host "`n[+] Running: Get-ADGroupMembersFromCsv for each file..." -ForegroundColor Green
        foreach ($file in $config.GroupMemberReport.CsvFiles) {
            Get-ADGroupMembersFromCsv -CsvFile     $file `
                                      -ColumnName  $config.GroupMemberReport.ColumnName `
                                      -LabelPrefix $config.GroupMemberReport.LabelPrefix `
                                      -LogLocation $config.GroupMemberReport.LogLocation `
                                      -Domains     $domains
        }
    }

    Write-Host "`n[✓] All configured tasks executed." -ForegroundColor Cyan
}