diff --git a/source/Private/Get-RequiredModule.ps1 b/source/Private/Get-RequiredModule.ps1 index fb426f5..b5b1c8d 100644 --- a/source/Private/Get-RequiredModule.ps1 +++ b/source/Private/Get-RequiredModule.ps1 @@ -1,15 +1,36 @@ function Get-RequiredModule { - return @( - @{ ModuleName = "ExchangeOnlineManagement"; RequiredVersion = "3.3.0" }, - @{ ModuleName = "AzureAD"; RequiredVersion = "2.0.2.182" }, - @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Authentication" }, - @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Users" }, - @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Groups" }, - @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "DirectoryObjects" }, - @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Domains" }, - @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Reports" }, - @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Mail" }, - @{ ModuleName = "Microsoft.Online.SharePoint.PowerShell"; RequiredVersion = "16.0.24009.12000" }, - @{ ModuleName = "MicrosoftTeams"; RequiredVersion = "5.5.0" } + [CmdletBinding(DefaultParameterSetName = 'AuditFunction')] + param ( + [Parameter(Mandatory = $true, ParameterSetName = 'AuditFunction')] + [switch]$AuditFunction, + + [Parameter(Mandatory = $true, ParameterSetName = 'SyncFunction')] + [switch]$SyncFunction ) + + switch ($PSCmdlet.ParameterSetName) { + 'AuditFunction' { + return @( + @{ ModuleName = "ExchangeOnlineManagement"; RequiredVersion = "3.3.0" }, + @{ ModuleName = "AzureAD"; RequiredVersion = "2.0.2.182" }, + @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Authentication" }, + @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Users" }, + @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Groups" }, + @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "DirectoryObjects" }, + @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Domains" }, + @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Reports" }, + @{ ModuleName = "Microsoft.Graph"; RequiredVersion = "2.4.0"; SubModuleName = "Mail" }, + @{ ModuleName = "Microsoft.Online.SharePoint.PowerShell"; RequiredVersion = "16.0.24009.12000" }, + @{ ModuleName = "MicrosoftTeams"; RequiredVersion = "5.5.0" } + ) + } + 'SyncFunction' { + return @( + @{ ModuleName = "ImportExcel"; RequiredVersion = "7.8.9" } + ) + } + default { + throw "Please specify either -AuditFunction or -SyncFunction switch." + } + } } diff --git a/source/Public/Invoke-M365SecurityAudit.ps1 b/source/Public/Invoke-M365SecurityAudit.ps1 index 1b7632c..a9b0046 100644 --- a/source/Public/Invoke-M365SecurityAudit.ps1 +++ b/source/Public/Invoke-M365SecurityAudit.ps1 @@ -65,7 +65,7 @@ function Invoke-M365SecurityAudit { } # Ensure required modules are installed if (!($NoModuleCheck)) { - $requiredModules = Get-RequiredModule + $requiredModules = Get-RequiredModule -AuditFunction foreach ($module in $requiredModules) { Assert-ModuleAvailability -ModuleName $module.ModuleName -RequiredVersion $module.RequiredVersion -SubModuleName $module.SubModuleName } diff --git a/source/Public/Sync-CISExcelAndCsvData.ps1 b/source/Public/Sync-CISExcelAndCsvData.ps1 index 22d84b4..e07b725 100644 --- a/source/Public/Sync-CISExcelAndCsvData.ps1 +++ b/source/Public/Sync-CISExcelAndCsvData.ps1 @@ -49,6 +49,12 @@ function Sync-CISExcelAndCsvData { ) process { + # Verify ImportExcel module is available + $requiredModules = Get-RequiredModule -SyncFunction + foreach ($module in $requiredModules) { + Assert-ModuleAvailability -ModuleName $module.ModuleName -RequiredVersion $module.RequiredVersion -SubModuleName $module.SubModuleName + } + # Merge Excel and CSV data $mergedData = Merge-CISExcelAndCsvData -ExcelPath $ExcelPath -WorksheetName $WorksheetName -CsvPath $CsvPath @@ -61,3 +67,4 @@ function Sync-CISExcelAndCsvData { } } } +