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