Skip to content

Instantly share code, notes, and snippets.

@manualbashing
Created December 15, 2020 11:25
Show Gist options
  • Save manualbashing/5ab29c2a54d7ed2c33faf1331522e161 to your computer and use it in GitHub Desktop.
Save manualbashing/5ab29c2a54d7ed2c33faf1331522e161 to your computer and use it in GitHub Desktop.
Install #powershell script dependencies
[CmdletBinding(SupportsShouldProcess)]
param (
# Path to the script with "requires module" statements
[Parameter(Mandatory)]
[string]
$Path
)
$dependencies = Get-ChildItem $Path |
Select-String -Pattern "^#Requires -Module (@{ ModuleName = '[^']+'; RequiredVersion = '[0-9.]+';? })" |
Foreach-Object { [pscustomobject]($_.Matches.Groups[1].Value | Invoke-Expression) }
foreach ($dep in $dependencies) {
$installedModule = Get-Module $dep.ModuleName -ListAvailable
if ($null -eq $installedModule -or $installedModule.Version.toString() -ne $dep.RequiredVersion) {
if ($PSCmdlet.ShouldProcess("$($dep.ModuleName) => $($dep.RequiredVersion)", "Install-Module")) {
Write-Host "Installing $($dep.ModuleName) => $($dep.RequiredVersion)"
Install-Module -Name $dep.ModuleName -RequiredVersion $dep.RequiredVersion -Scope CurrentUser -AllowClobber
}
}
else {
Write-Host "Already installed: $($dep.ModuleName) => $($dep.RequiredVersion)"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment