@@ -10,18 +10,40 @@ param(
10
10
11
11
[ValidateScript ({ Test-Path $_ })]
12
12
[string ]
13
- $ModuleSettingsPath
13
+ $ModuleSettingsPath ,
14
+
15
+ # Force installation of required modules, even if they are already installed.
16
+ [switch ]
17
+ $Force
14
18
)
15
19
16
20
. " $psscriptroot /common-functions.ps1"
17
21
18
22
$settingPath = " $PSScriptRoot /../module/$ModuleName /config/ModuleSettings.json"
19
23
if ($ModuleSettingsPath ) { $settingPath = $ModuleSettingsPath }
20
24
$content = Get-Content - Path $settingPath | ConvertFrom-Json
21
- Write-Verbose (" Installing Module $ ( $content.sourceModule ) " )
22
- Install-Module $content.sourceModule - scope currentuser - Force - AllowClobber
23
25
24
- foreach ($moduleName in $content.destinationModuleName ){
25
- Write-Verbose (" Installing Module $ ( $moduleName ) " )
26
- Install-Module $moduleName - scope currentuser - RequiredVersion $content.destinationModuleVersion - Force - AllowClobber
27
- }
26
+ if ($Force ) {
27
+ Write-Verbose ' Skipping the check for installed prerequisites.'
28
+ } else {
29
+ Write-Verbose ' Checking installed modules for required dependencies.'
30
+ $InstalledModules = Get-Module - ListAvailable - Verbose:$false | Group-Object - Property Name
31
+ }
32
+
33
+ $SourceModule = $content.sourceModule
34
+ if (($InstalledModules.Name -contains $SourceModule ) -and -not $Force ) {
35
+ Write-Verbose " The $SourceModule module is already installed."
36
+ } else {
37
+ Write-Verbose (" Installing Module: $sourceModule " )
38
+ Install-Module $sourceModule - Scope CurrentUser - Force - AllowClobber
39
+ }
40
+
41
+ foreach ($moduleName in $content.destinationModuleName ) {
42
+ $InstalledModuleReference = $InstalledModules.Where ({ $_.Name -eq $moduleName }).Group
43
+ if (($InstalledModuleReference.Version -ge $content.destinationModuleVersion ) -and -not $Force ) {
44
+ Write-Verbose " The $moduleName module is already installed."
45
+ } else {
46
+ Write-Verbose " Installing Module: $moduleName "
47
+ Install-Module $moduleName - Scope CurrentUser - RequiredVersion $content.destinationModuleVersion - Force - AllowClobber
48
+ }
49
+ }
0 commit comments