Save-PowerShellAsset.ps1
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 65 66 67 68 69 70 |
<#
.SYNOPSIS Download PowerShell Asset #> function Save-PowerShellAsset { [CmdletBinding(SupportsShouldProcess, DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Default')] [Switch]$Latest, [Parameter(ParameterSetName = 'Default')] [ReleaseTypes]$Release = [ReleaseTypes]::Stable, [Parameter(ParameterSetName = 'Version')] [SemVer]$Version, [Parameter(ParameterSetName = 'Default', Mandatory = $true)] [Parameter(ParameterSetName = 'Version', Mandatory = $true)] [AssetArchtectures[]]$AssetType, [Parameter(ParameterSetName = 'Default', Mandatory = $true)] [Parameter(ParameterSetName = 'Version', Mandatory = $true)] [string]$OutDirectory, [Parameter(ParameterSetName = 'Default')] [Parameter(ParameterSetName = 'Version')] [string]$Token ) if (@($AssetType).Length -eq 1) { if ($AssetType[0] -eq [AssetArchtectures]::Unknown) { Write-Error $Messages.Save_PowerShellAsset_001 return } } else { if ($AssetType -contains [AssetArchtectures]::Unknown) { Write-Error $Messages.Save_PowerShellAsset_002 return } } # find PowerShell release $psReleaseInfo = $null switch ($PSCmdlet.ParameterSetName) { 'Version' { $psReleaseInfo = Find-PowerShellRelease -Version $Version -Token $Token } Default { $psReleaseInfo = Find-PowerShellRelease -Latest -Release $Release -Token $Token } } if (-not $psReleaseInfo) { Write-Warning $Messages.Save_PowerShellAsset_003 return } WriteInfo ($Messages.Save_PowerShellAsset_004 -f $psReleaseInfo.Version) # download foreach ($at in $AssetType) { $downloadUrls = ($psReleaseInfo.Assets | Where-Object { $_.Architecture -eq $at }).DownloadUrl.OriginalString if (@($downloadUrls).Length -eq 0) { Write-Error $Messages.Save_PowerShellAsset_005 return } foreach ($url in $downloadUrls) { $outFile = Join-Path $OutDirectory $url.split("/")[-1] if ($PSCmdlet.ShouldProcess('Download file')) { DownloadFile -Uri $url -OutFile $outFile -Token $Token } else { Write-Warning $Messages.Save_PowerShellAsset_006 WriteInfo ("(Skip) Download {0}`r`n To {1}..." -f $url, $outFile) } } } } |