Public/New-OSBUpdate.ps1

<#
.SYNOPSIS
Creates a new OSBuilder Update Catalog XML
 
.DESCRIPTION
Creates a new OSBuilder Update Catalog XML for use with Get-OSBUpdate
 
.LINK
https://www.osdeploy.com/osbuilder/docs/functions/updates/new-osbupdate
 
.PARAMETER Category
Category of the Update
 
.PARAMETER Description
Description of the Update
 
.PARAMETER Category
Category of the Update
 
.PARAMETER KBNumber
KB Number of the Update
 
.PARAMETER OS
Operating System the Update applies to
 
.PARAMETER OSArch
Operating System Architecture the Update applies to
 
.PARAMETER OSBuild
Operating System Build Number the Update applies to
 
.PARAMETER ReleaseDay
Day of the Release
 
.PARAMETER ReleaseMonth
Month of the Release
 
.PARAMETER ReleaseYear
Year of the Release
 
.PARAMETER URL
Download link of the Update
 
.PARAMETER WinPE
Apply the Update to WinPE (Windows 7 only)
#>

function New-OSBUpdate {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory)]
        [ValidateSet('Adobe','Component','Cumulative','Servicing','Setup','Windows 7 x64 7601','Windows 7 x86 7601')]
        [string]$Category,

        [Parameter(Mandatory)]
        [string]$Description,
        
        [Parameter(Mandatory)]
        [int]$KBNumber,

        [Parameter(Mandatory)]
        [ValidateSet('Windows 10','Windows Server 2016','Windows Server 2019','Windows 7')]
        [string]$OS,

        [Parameter(Mandatory)]
        [ValidateSet('x64','x86')]
        [string]$OSArch,

        [Parameter(Mandatory)]
        [ValidateSet('1507','1511','1607','1703','1709','1803','1809','7601')]
        [string]$OSBuild,

        [Parameter(Mandatory)]
        [ValidateSet('01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31')]
        [string]$ReleaseDay,
        
        [Parameter(Mandatory)]
        [ValidateSet('01','02','03','04','05','06','07','08','09','10','11','12')]
        [string]$ReleaseMonth,

        [Parameter(Mandatory)]
        [ValidateSet('2019','2018','2017','2016','2015','2014','2013','2012','2011')]
        [string]$ReleaseYear,

        [Parameter(Mandatory)]
        [string]$URL,

        [switch]$WinPE
    )

    BEGIN {
        #Write-Host '========================================================================================' -ForegroundColor DarkGray
        #Write-Host "$($MyInvocation.MyCommand.Name) BEGIN" -ForegroundColor Green

        #===================================================================================================
        Write-Verbose '19.1.1 Initialize OSBuilder'
        #===================================================================================================
        Get-OSBuilder -CreatePaths -HideDetails
    }

    PROCESS {
        Write-Host '========================================================================================' -ForegroundColor DarkGray
        Write-Host "$($MyInvocation.MyCommand.Name) PROCESS" -ForegroundColor Green

        #===================================================================================================
        Write-Verbose '19.1.1 Join DateTime Property'
        #===================================================================================================
        $ReleaseDate = [datetime]::ParseExact("$ReleaseDay/$ReleaseMonth/$ReleaseYear", "dd/MM/yyyy", $null)

        #===================================================================================================
        Write-Verbose '19.1.1 Create Custom Object'
        #===================================================================================================
        $OSBUpdate = New-Object PSObject
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name Category -Value "$Category"
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name KBNumber -Value "$KBNumber"
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name KBTitle -Value "$ReleaseYear-$ReleaseMonth $Description $OS $OSBuild $OSArch KB$KBNumber"
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name KBUrl -Value "http://support.microsoft.com/help/$KBNumber"
        if ($WinPE.IsPresent) {
            Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name Severity -Value 'WinPE'
        } else {
            Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name Severity -Value 'Custom'
        }
        
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name DatePosted -Value $([datetime]"$(($ReleaseDate).ToString())")
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name DateRevised -Value $([datetime]"$(($ReleaseDate).ToString())")
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name DateCreated -Value $([datetime]"$(($ReleaseDate).ToString())")
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name DateLastModified -Value $([datetime]"$(($ReleaseDate).ToString())")
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name FileName -Value "$(Split-Path $URL -Leaf)"
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name URL -Value "$URL"

        #===================================================================================================
        Write-Verbose '19.1.1 Create OSBuilder Update Category Directory'
        #===================================================================================================
        if (!(Test-Path "$OSBuilderContent\Updates\$Category")) {New-Item -Path "$OSBuilderContent\Updates\$Category" -ItemType Directory -Force | Out-Null}

        #===================================================================================================
        Write-Verbose '19.1.1 Create OSBuilder Update Catalog'
        #===================================================================================================
        $OSBUpdate | Export-Clixml -Path "$OSBuilderContent\Updates\$Category\Catalog $Category $ReleaseYear-$ReleaseMonth $Description $OS $OSBuild $OSArch KB$KBNumber.xml"
    }

    END {
        #Write-Host '========================================================================================' -ForegroundColor DarkGray
        #Write-Host "$($MyInvocation.MyCommand.Name) END" -ForegroundColor Green
    }
}