Test-PowershellModule.ps1
<#
.SYNOPSIS This function tests to see if a powershell module necessary for script execution is present. .DESCRIPTION This function tests to see if a powershell module necessary for script execution is present. .PARAMETER powershellModuleName The module name to test for. .PARAMETER powershellVersionTest Determines if a version test should be performed. .EXAMPLE Test-PowershellModule -powershellModuleName NAME -powershellVersionTest TRUE #> Function Test-PowershellModule { [cmdletbinding()] Param ( [Parameter(Mandatory = $true)] [string]$powershellModuleName, [Parameter(Mandatory = $false)] [boolean]$powershellVersionTest=$FALSE ) #Define variables that will be utilzed in the function. [array]$commandsArray=$NULL [string]$azureADModuleName = "AzureAD" [string]$exchangeOnlineManagementModuleName = "ExchangeOnlineManagement" [string]$exchangeOnlineManagementMinimumVersion ="3.0.0" #Initiate the test. Out-LogFile -string "********************************************************************************" Out-LogFile -string "BEGIN TEST-POWERSHELLMODULE" Out-LogFile -string "********************************************************************************" #Write function parameter information and variables to a log file. Out-LogFile -string ("PowerShellModuleName = "+$powershellModuleName) try { $commandsArray = get-command -module $powershellModuleName -errorAction STOP } catch { if ($powershellModuleName -eq $azureADModuleName) { out-logfile -string "Please see https://timmcmic.wordpress.com/2022/09/18/office-365-distribution-list-migration-version-2-0-part-20/ for more information on a new requirement." } Out-LogFile -string $_ -isError:$TRUE } if ($commandsArray.count -eq 0) { Out-LogFile -string "The powershell module was not found and is required for script functionality." -iserror:$TRUE } else { if ($powershellModuleName -eq $azureADModuleName) { out-logfile -string "Please see https://timmcmic.wordpress.com/2022/09/18/office-365-distribution-list-migration-version-2-0-part-20/ for more information on a new requirement." } Out-LogFile -string "The powershell module was found." } if ($powershellVersionTest -eq $TRUE) { if (get-PackageProvider nuget) { out-logfile -string "Proceed with version test NUGET package provider installed." out-logfile -string "The powershell module is gallery installed - check versions and advise." $galleryModule = Find-Module -name $powershellModuleName -ErrorAction Continue if ($powershellModuleName -eq $exchangeOnlineManagementModuleName) { out-logfile -string "Enforcing new version requirement for Exchange Online Management - minimum v3.0.0" out-logfile -string ("Testing Exchange Online Management Module Version: "+$exchangeOnlineManagementMinimumVersion) if ($commandsArray[0].version -lt $exchangeOnlineManagementMinimumVersion) { out-logfile -string ("Gallery Module "+$galleryModule.version) out-logfile -string ("Installed Module "+$commandsArray[0].version) out-logfile -string "Exchange Online Management Module minimum version 3.0.0 required to proceed." out-logfile -string "See https://timmcmic.wordpress.com/2022/09/30/office-365-distribution-list-migration-version-2-0-part-22/" -isError:$true } else { out-logfile -string "Minimum version for Exchange Online Management Powershell satisfied." } } if ($galleryModule.version -eq $commandsArray[0].version) { out-logfile -string "The version of the installed module is current." out-logfile -string ("Gallery Module "+$galleryModule.version) out-logfile -string ("Installed Module "+$commandsArray[0].version) } elseif ($galleryModule.version -gt $commandsArray[0].version) { out-logfile -string "*******************" out-logfile -string "*******************" out-logfile -string ("Current gallery module is not installed for module"+$powershellModuleName) out-logfile -string ("Gallery Module "+$galleryModule.version) out-logfile -string ("Installed Module "+$commandsArray[0].version) out-logfile -string "RECOMMEND MODULE UPGRADE FOR FUTURE MIGRATIONS" out-logfile -string "*******************" out-logfile -string "*******************" } else { out-logfile -string "The version you are using is newer than the gallery module." out-logfile -string "Have fun trying something new :-)" } } else { out-logfile -string "NUGET package provider not available - version testing unavailable." } } Out-LogFile -string "END TEST-POWERSHELLMODULE" Out-LogFile -string "********************************************************************************" return $commandsArray[0].version } |