Archve/Use-OSDUpdateBuilder.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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<#
.SYNOPSIS
Creates a new OSDBuilder Update Catalog XML
 
.DESCRIPTION
Creates a new OSDBuilder Update Catalog XML for use with Get-OSDUpdateBuilder
 
.LINK
http://osdbuilder.com/functions/new-osdupdatebuilder
 
.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 Use-OSDUpdateBuilder {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory)]
        [ValidateSet(
            'Windows 7',
            'Windows 10 Custom',
            'Windows Server 2012 R2 Custom',
            'Windows Server 2016 Custom',
            'Windows Server 2019 Custom')]
        [string]$Catalog,

        [Parameter(Mandatory)]
        [string]$KBTitle,
        
        [Parameter(Mandatory)]
        [string]$KBNumber,

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

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

        [Parameter(Mandatory)]
        [ValidateSet (1903,1809,1803,1709,1703,1607,1511,1507,9800,7601)]
        [string]$UpdateBuild,

        [ValidateSet('AdobeSU','DotNet','DotNetCU','LCU','SSU')]
        [string]$UpdateGroup,

        [datetime]$ReleaseDate,

        [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,
        

        [ValidateSet('01','02','03','04','05','06','07','08','09','10','11','12')]
        [string]$ReleaseMonth,


        [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 -ForegroundColor Green "$($MyInvocation.MyCommand.Name) BEGIN"

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

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

        #===================================================================================================
        # Join DateTime Property
        #===================================================================================================
        #$ReleaseDate = [datetime]::ParseExact("$ReleaseDay/$ReleaseMonth/$ReleaseYear", "dd/MM/yyyy", $null)
        #===================================================================================================
        # UpdateOS
        #===================================================================================================
        if ($UpdateOS -eq 'Windows 7') {$OSDCore = $true}
        #===================================================================================================
        # Create Custom Object
        #===================================================================================================
        $OSDUpdateBuilder = New-Object PSObject
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name Catalog -Value $Catalog
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name OSDVersion -Value $OSDBuilderVersion
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name OSDStatus -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name UpdateOS -Value $UpdateOS
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name UpdateBuild -Value $UpdateBuild
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name UpdateArch -Value $UpdateArch
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name UpdateGroup -Value $UpdateGroup
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name CreationDate -Value $([datetime]"$(($ReleaseDate).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"))")
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name KBNumber -Value $KBNumber
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name Title -Value $KBTitle
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name LegacyName -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name Type -Value 'SelfContained'
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name FileName -Value "$(Split-Path $URL -Leaf)"
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name Size -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name CompanyTitles -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name ProductFamilyTitles -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name Category -Value $UpdateOS
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name UpdateClassificationTitle -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name MsrcSeverity -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name SecurityBulletins -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name UpdateType -Value 'Software'
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name PublicationState -Value 'Published'
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name HasLicenseAgreement -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name RequiresLicenseAgreementAcceptance -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name State -Value 'Ready'
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name IsLatestRevision -Value $true
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name HasEarlierRevision -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name IsBeta -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name HasStaleUpdateApprovals -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name IsApproved -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name IsDeclined -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name HasSupersededUpdates -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name IsSuperseded -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name IsWsusInfrastructureUpdate -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name IsEditable -Value $false
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name UpdateSource -Value 'MicrosoftUpdate'
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name AdditionalInformationUrls -Value "http://support.microsoft.com/help/$KBNumber"
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name Description -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name ReleaseNotes -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name FileUri -Value $URL
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name OriginUri -Value $URL
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name Hash -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name AdditionalHash -Value ''
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name OSDCore -Value $OSDCore
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name OSDWinPE -Value $WinPE
        Add-Member -InputObject $OSDUpdateBuilder -MemberType NoteProperty -Name OSDGuid -Value New-Guid
        #===================================================================================================
        # Create OSDBuilder Update Category Directory
        #===================================================================================================
        if (!(Test-Path "$OSDBuilderContent\OSDUpdate")) {New-Item -Path "$OSDBuilderContent\OSDUpdate" -ItemType Directory -Force | Out-Null}

        #===================================================================================================
        # Create OSDBuilder Update Catalog
        #===================================================================================================
        $OSDUpdateBuilder | Export-Clixml -Path "$OSDBuilderContent\OSDUpdate\$Catalog $KBTitle.xml"
    }

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