|
| 1 | + |
| 2 | +[cmdletbinding(DefaultParameterSetName = 'task')] |
| 3 | +param( |
| 4 | + [parameter(ParameterSetName = 'task', Position = 0)] |
| 5 | + [string[]]$Task = 'default', |
| 6 | + |
| 7 | + [parameter(ParameterSetName = 'help')] |
| 8 | + [switch]$Help, |
| 9 | + |
| 10 | + [switch]$UpdateModules |
| 11 | +) |
| 12 | + |
| 13 | +function Resolve-Module { |
| 14 | + [Cmdletbinding()] |
| 15 | + param ( |
| 16 | + [Parameter(Mandatory, ValueFromPipeline)] |
| 17 | + [string[]]$Name, |
| 18 | + |
| 19 | + [switch]$UpdateModules |
| 20 | + ) |
| 21 | + |
| 22 | + begin { |
| 23 | + Get-PackageProvider -Name Nuget -ForceBootstrap | Out-Null |
| 24 | + Set-PSRepository -Name PSGallery -InstallationPolicy Trusted |
| 25 | + |
| 26 | + $PSDefaultParameterValues = @{ |
| 27 | + '*-Module:Verbose' = $false |
| 28 | + 'Install-Module:ErrorAction' = 'Stop' |
| 29 | + 'Install-Module:Force' = $true |
| 30 | + 'Install-Module:Scope' = 'CurrentUser' |
| 31 | + 'Install-Module:Verbose' = $false |
| 32 | + 'Install-Module:AllowClobber' = $true |
| 33 | + 'Import-Module:ErrorAction' = 'Stop' |
| 34 | + 'Import-Module:Verbose' = $false |
| 35 | + 'Import-Module:Force' = $true |
| 36 | + } |
| 37 | + } |
| 38 | + |
| 39 | + process { |
| 40 | + foreach ($moduleName in $Name) { |
| 41 | + $versionToImport = '' |
| 42 | + |
| 43 | + Write-Verbose -Message "Resolving Module [$($moduleName)]" |
| 44 | + if ($Module = Get-Module -Name $moduleName -ListAvailable -Verbose:$false) { |
| 45 | + # Determine latest version on PSGallery and warn us if we're out of date |
| 46 | + $latestLocalVersion = ($Module | Measure-Object -Property Version -Maximum).Maximum |
| 47 | + $latestGalleryVersion = (Find-Module -Name $moduleName -Repository PSGallery | |
| 48 | + Measure-Object -Property Version -Maximum).Maximum |
| 49 | + |
| 50 | + # Out we out of date? |
| 51 | + if ($latestLocalVersion -lt $latestGalleryVersion) { |
| 52 | + if ($UpdateModules) { |
| 53 | + Write-Verbose -Message "$($moduleName) installed version [$($latestLocalVersion.ToString())] is outdated. Installing gallery version [$($latestGalleryVersion.ToString())]" |
| 54 | + if ($UpdateModules) { |
| 55 | + Install-Module -Name $moduleName -RequiredVersion $latestGalleryVersion |
| 56 | + $versionToImport = $latestGalleryVersion |
| 57 | + } |
| 58 | + } else { |
| 59 | + Write-Warning "$($moduleName) is out of date. Latest version on PSGallery is [$latestGalleryVersion]. To update, use the -UpdateModules switch." |
| 60 | + } |
| 61 | + } else { |
| 62 | + $versionToImport = $latestLocalVersion |
| 63 | + } |
| 64 | + } else { |
| 65 | + Write-Verbose -Message "[$($moduleName)] missing. Installing..." |
| 66 | + Install-Module -Name $moduleName -Repository PSGallery |
| 67 | + $versionToImport = (Get-Module -Name $moduleName -ListAvailable | Measure-Object -Property Version -Maximum).Maximum |
| 68 | + } |
| 69 | + |
| 70 | + Write-Verbose -Message "$($moduleName) installed. Importing..." |
| 71 | + if (-not [string]::IsNullOrEmpty($versionToImport)) { |
| 72 | + Import-module -Name $moduleName -RequiredVersion $versionToImport |
| 73 | + } else { |
| 74 | + Import-module -Name $moduleName |
| 75 | + } |
| 76 | + } |
| 77 | + } |
| 78 | +} |
| 79 | + |
| 80 | +'BuildHelpers', 'psake' | Resolve-Module -UpdateModules:($PSBoundParameters.ContainsKey('UpdateModules')) |
| 81 | + |
| 82 | +if ($PSBoundParameters.ContainsKey('help')) { |
| 83 | + Get-PSakeScriptTasks -buildFile "$PSScriptRoot\psake.ps1" | |
| 84 | + Sort-Object -Property Name | |
| 85 | + Format-Table -Property Name, Description, Alias, DependsOn |
| 86 | +} else { |
| 87 | + Set-BuildEnvironment -Force |
| 88 | + |
| 89 | + Invoke-psake -buildFile "$PSScriptRoot\psake.ps1" -taskList $Task -nologo -Verbose:($VerbosePreference -eq 'Continue') |
| 90 | + exit ( [int]( -not $psake.build_success ) ) |
| 91 | +} |
0 commit comments