Skip to content

Commit 7868d08

Browse files
Add Resolve-PSModuleDependency function to handle module dependencies
1 parent 781d930 commit 7868d08

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#Requires -Modules @{ ModuleName = 'Retry'; ModuleVersion = '0.1.3' }
2+
3+
function Resolve-PSModuleDependency {
4+
<#
5+
.SYNOPSIS
6+
Resolve dependencies for a module based on the manifest file.
7+
8+
.DESCRIPTION
9+
Resolve dependencies for a module based on the manifest file, following PSModuleInfo structure
10+
11+
.EXAMPLE
12+
Resolve-PSModuleDependency -Path 'C:\MyModule\MyModule.psd1'
13+
14+
Installs all modules defined in the manifest file, following PSModuleInfo structure.
15+
16+
.NOTES
17+
Should later be adapted to support both pre-reqs, and dependencies.
18+
Should later be adapted to take 4 parameters sets: specific version ("requiredVersion" | "GUID"), latest version ModuleVersion,
19+
and latest version within a range MinimumVersion - MaximumVersion.
20+
#>
21+
[Alias('Resolve-PSModuleDependencies')]
22+
[CmdletBinding()]
23+
param(
24+
# The path to the manifest file.
25+
[Parameter(Mandatory)]
26+
[string] $ManifestFilePath
27+
)
28+
29+
Write-Host 'Resolving dependencies'
30+
31+
$manifest = Import-PowerShellDataFile -Path $ManifestFilePath
32+
Write-Host "Reading [$ManifestFilePath]"
33+
Write-Host "Found [$($manifest.RequiredModules.Count)] modules to install"
34+
35+
foreach ($requiredModule in $manifest.RequiredModules) {
36+
$installParams = @{}
37+
38+
if ($requiredModule -is [string]) {
39+
$installParams.Name = $requiredModule
40+
} else {
41+
$installParams.Name = $requiredModule.ModuleName
42+
$installParams.MinimumVersion = $requiredModule.ModuleVersion
43+
$installParams.RequiredVersion = $requiredModule.RequiredVersion
44+
$installParams.MaximumVersion = $requiredModule.MaximumVersion
45+
}
46+
$installParams.Force = $true
47+
$installParams.Verbose = $false
48+
49+
Write-Host "[$($installParams.Name)] - Installing module"
50+
$VerbosePreferenceOriginal = $VerbosePreference
51+
$VerbosePreference = 'SilentlyContinue'
52+
Retry -Count 5 -Delay 10 {
53+
Install-Module @installParams -AllowPrerelease:$false
54+
}
55+
$VerbosePreference = $VerbosePreferenceOriginal
56+
Write-Host "[$($installParams.Name)] - Importing module"
57+
$VerbosePreferenceOriginal = $VerbosePreference
58+
$VerbosePreference = 'SilentlyContinue'
59+
Import-Module @installParams
60+
$VerbosePreference = $VerbosePreferenceOriginal
61+
Write-Host "[$($installParams.Name)] - Done"
62+
}
63+
Write-Host 'Resolving dependencies - Done'
64+
}

0 commit comments

Comments
 (0)