@@ -19,47 +19,59 @@ param(
1919 $Force
2020)
2121
22- # Get module settings from the relevant ModuleSettings.json file.
22+ # Get module settings from the relevant ModuleSettings.json file or a file that is manually specified .
2323if ($ModuleSettingsPath ) {
2424 $SettingsPath = $ModuleSettingsPath
2525} else {
2626 $SettingsPath = " $PSScriptRoot /../module/$ModuleName /config/ModuleSettings.json"
2727}
28+
29+ Write-Host " Getting module settings from: '$SettingsPath '" - ForegroundColor Cyan
2830$ModuleSettings = Get-Content - Path $SettingsPath | ConvertFrom-Json
29- $RequiredVersion = $ModuleSettings.destinationModuleVersion
31+ $SourceModule = $ModuleSettings.sourceModule
32+ $DependencyRequiredVersion = $ModuleSettings.destinationModuleVersion
3033
31- # Do not check for installed modules if -Force is specified .
32- if ( $Force ) {
33- Write-Verbose ' Skipping the check for installed prerequisites. Forcing the installation of all required modules. '
34- } else {
35- Write-Verbose ' Checking installed modules for required dependencies. '
36- $InstalledModules = Get-Module - ListAvailable - Verbose:$false | Group -Object - Property Name
34+ # Get the names of the source and destination modules from the ModuleSettings.json file .
35+ [ string []] $ModuleNames = (( $ModuleSettings .destinationModuleName ) + $SourceModule ).Split()
36+
37+ Write-Host ' Checking for installed source and dependency modules... ' - ForegroundColor Cyan
38+ $InstalledModules = foreach ( $Module in $ModuleNames ) {
39+ Get-Module - Name $Module - ListAvailable - Verbose:$false | Sort -Object Name
3740}
3841
39- # Install the AzureAD module.
40- $SourceModule = $ModuleSettings.SourceModule
41- if (($InstalledModules.Name -contains $SourceModule ) -and -not $Force ) {
42- Write-Verbose " Checking for updates to the '$SourceModule ' module."
43- } else {
44- Write-Verbose (" Installing Module: $sourceModule " )
42+ # Check if the source module is installed and then install it or update it.
43+ $IsSourceInstalled = $InstalledModules.Name -contains $SourceModule
44+ if (
45+ (-not $IsSourceInstalled ) -or
46+ ($IsSourceInstalled -and $Force.IsPresent )
47+ ) {
48+ Write-Host " Installing Module: '$SourceModule '" - ForegroundColor Green
4549 try {
46- Install-Module $sourceModule - Scope CurrentUser - Force - AllowClobber
50+ Install-Module $SourceModule - Scope CurrentUser - Force - AllowClobber
4751 } catch {
48- Write-Error " Failed to install the $sourceModule module. Error: $_ "
52+ Write-Error " Failed to install the ' $SourceModule ' module. Error: $_ "
4953 }
5054}
5155
52- # Install the required module dependencies if missing the required version or if -Force.
53- foreach ($moduleName in $ModuleSettings.destinationModuleName ) {
54- $InstalledModuleReference = $InstalledModules.Where ({ $_.Name -eq $moduleName })
55- if (-not $InstalledModuleReference -or $Force ) {
56- Write-Verbose " Installing version $RequiredVersion of $moduleName "
56+ # Install or update the destination modules specified in the ModuleSettings.json file.
57+ foreach ($DestinationModuleName in $ModuleSettings.destinationModuleName ) {
58+ $IsDependencyInstalled = $InstalledModules.Name -contains $DestinationModuleName
59+ if (
60+ # Force installation if the module is not installed or if the Force switch is present.
61+ (-not $IsDependencyInstalled ) -or ($IsDependencyInstalled -and $Force.IsPresent )
62+ ) {
63+ Write-Host " Installing Module: '$DestinationModuleName '" - ForegroundColor Green
64+ try {
65+ Install-Module $DestinationModuleName - RequiredVersion $DependencyRequiredVersion - Scope CurrentUser - Force - AllowClobber
66+ } catch {
67+ Write-Error " Failed to install the '$DestinationModuleName ' module. Error: $_ "
68+ }
69+ } else {
70+ Write-Host " Updating Module: '$DestinationModuleName '" - ForegroundColor Green
5771 try {
58- Install -Module $moduleName - Scope CurrentUser - RequiredVersion $RequiredVersion - Force - AllowClobber
72+ Update -Module - Name $DestinationModuleName - RequiredVersion $DependencyRequiredVersion - ErrorAction SilentlyContinue
5973 } catch {
60- Write-Error " Failed to install module $moduleName ${RequiredVersion} . Error: $_ "
74+ Write-Warning " Failed to update module ' $DestinationModuleName ' to version ${RequiredVersion} . Error: $_ "
6175 }
62- } elseif ($InstalledModuleReference.Group.Version -contains $RequiredVersion ) {
63- Write-Verbose " Found version $RequiredVersion of $moduleName "
6476 }
6577}
0 commit comments