Public/Get-LatestServicingStackUpdate.ps1

Function Get-LatestServicingStackUpdate {
    <#
        .SYNOPSIS
            Retrieves the latest Windows 10 Servicing Stack Update.

        .DESCRIPTION
            Retrieves the latest Windows 10 Servicing Stack Update from the Windows 10 update history feed.

            More information on Windows 10 Servicing Stack Updates can be found here: https://docs.microsoft.com/en-us/windows/deployment/update/servicing-stack-updates

        .EXAMPLE

        PS C:\> Get-LatestServicingStackUpdate

        This commands reads the the Windows 10 update history feed and returns an object that lists the most recent Windows 10 Servicing Stack Update.
    #>

    [OutputType([System.Management.Automation.PSObject])]
    [CmdletBinding(SupportsShouldProcess = $False, HelpUri = "https://docs.stealthpuppy.com/docs/latestupdate/usage/get-stack")]
    [Alias("Get-LatestServicingStack")]
    Param (
        [Parameter(Mandatory = $False, Position = 0, ValueFromPipeline, HelpMessage = "Windows OS Name")]
        [ValidateSet('Windows7', 'Windows8', 'Windows10', 'WindowsClient', 'WindowsServer', 'All')]
        [ValidateNotNullOrEmpty()]
        [System.String] $OS = 'Windows10',

        [Parameter(Mandatory = $False, Position = 1, ValueFromPipeline, HelpMessage = "Windows 10 Semi-annual Channel version number.")]
        [ValidateSet('1903', '1809', '1803', '1709', '1703', '1607')]
        [ValidateNotNullOrEmpty()]
        [System.String[]] $Version = "1903"
    )

    # Get module strings from the JSON
    $resourceStrings = Get-ModuleResource

    # If resource strings are returned we can continue
    If ($Null -ne $resourceStrings) {

        # Get the update feed and continue if successfully read
        ForEach ($ver in $Version) {
            $updateFeed = Get-UpdateFeed -Uri $resourceStrings.UpdateFeeds.$OS
            If ($Null -ne $updateFeed) {

                # Filter the feed for servicing stack updates and continue if we get updates
                $updateList = Get-UpdateServicingStack -UpdateFeed $updateFeed -Version $ver
                If ($Null -ne $updateList) {

                    # Get download info for each update from the catalog
                    $downloadInfo = Get-UpdateCatalogDownloadInfo -UpdateId $updateList.ID

                    # Add the Version and Architecture properties to the list
                    $updateListWithVersionParams = @{
                        InputObject = $downloadInfo
                        Property = "Note"
                        NewPropertyName = "Version"
                        MatchPattern = $resourceStrings.Matches."$($OS)Version"
                    }
                    $updateListWithVersion = Add-Property @updateListWithVersionParams

                    $updateListWithArchParams = @{
                        InputObject = $updateListWithVersion
                        Property = "Note"
                        NewPropertyName = "Architecture"
                        MatchPattern = $resourceStrings.Matches.Architecture
                    }
                    $updateListWithArch = Add-Property @updateListWithArchParams

                    # Return object to the pipeline
                    Write-Output -InputObject $updateListWithArch
                }
            }
        }
    }
}