Public/New-OSBUpdate.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<#
.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("yyyy'-'MM'-'dd'T'HH':'mm':'ss"))")
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name DateRevised -Value $([datetime]"$(($ReleaseDate).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"))")
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name DateCreated -Value $([datetime]"$(($ReleaseDate).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"))")
        Add-Member -InputObject $OSBUpdate -MemberType NoteProperty -Name DateLastModified -Value $([datetime]"$(($ReleaseDate).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"))")
        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
    }
}