Public/EnablementPackage.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
71
72
73
function Get-EnablementPackage {
    [CmdletBinding()]
    param (
        [ValidateSet('21H1','20H2','1909')]
        [Alias('Build')]
        [string]$OSBuild = '21H1',

        [ValidateSet('x64','x86')]
        [string]$OSArch = 'x64'
    )
    #=======================================================================
    # Import Local EnablementPackage
    #=======================================================================
    $Result = Import-Clixml "$($MyInvocation.MyCommand.Module.ModuleBase)\Catalogs\EnablementPackage\Catalog.xml"
    #=======================================================================
    # Filter Compatible
    #=======================================================================
    $Result = $Result | `
    Where-Object {$_.UpdateArch -eq $OSArch} | `
    Where-Object {$_.UpdateBuild -eq $OSBuild}
    #=======================================================================
    # Pick and Sort
    #=======================================================================
    $Result = $Result | Sort-Object CreationDate -Descending | Select-Object -First 1
    #=======================================================================
    # Return
    #=======================================================================
    Return $Result
    #=======================================================================
}
function Save-EnablementPackage {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline = $true)]
        [Alias ('DownloadFolder','Path')]
        [string]$DownloadPath = "$env:TEMP",

        [ValidateSet('21H1','20H2','1909')]
        [Alias('Build')]
        [string]$OSBuild = '21H1',

        [ValidateSet('x64','x86')]
        [string]$OSArch = 'x64'
    )
    #=======================================================================
    # Get-EnablementPackage
    #=======================================================================
    $Result = Get-EnablementPackage -OSBuild $OSBuild -OSArch $OSArch
    #=======================================================================
    # SaveWebFile
    #=======================================================================
    if ($Result) {
        if (Test-Path "$DownloadPath\$($Result.FileName)") {
            Get-Item "$DownloadPath\$($Result.FileName)"
        }
        elseif (Test-WebConnection -Uri "$($Result.FileUri)") {
            $SaveWebFile = Save-WebFile -SourceUrl $Result.FileUri -DestinationDirectory "$DownloadPath" -DestinationName $Result.FileName

            if (Test-Path $SaveWebFile.FullName) {
                Get-Item $SaveWebFile.FullName
            }
            else {
                Write-Warning "Could not download the Enablement Package"
            }
        }
        else {
            Write-Warning "Could not verify an Internet connection for the Enablement Package"
        }
    }
    else {
        Write-Warning "Unable to determine a suitable Enablement Package"
    }
}