Private/Get-PEBuilds.ps1
<#
.SYNOPSIS Gets details about all Operating Systems in PEBuilds .DESCRIPTION Gets details about all Operating Systems in PEBuilds .PARAMETER GridView Displays results in GridView #> function Get-PEBuilds { [CmdletBinding()] PARAM ( [switch]$GridView ) BEGIN { #Write-Host '========================================================================================' -ForegroundColor DarkGray #Write-Host "$($MyInvocation.MyCommand.Name) BEGIN" -ForegroundColor Green #=================================================================================================== Write-Verbose '19.1.1 Initialize OSBuilder' #=================================================================================================== Get-OSBuilder -CreatePaths -HideDetails #=================================================================================================== Write-Verbose '19.1.1 Gather All PEBuilds' #=================================================================================================== $AllPEBuilds = @() $AllPEBuilds = Get-ChildItem -Path "$OSBuilderPEBuilds" -Directory | Select-Object -Property * | Where-Object {Test-Path $(Join-Path $_.FullName "info\xml\Get-WindowsImage.xml")} } PROCESS { #Write-Host '========================================================================================' -ForegroundColor DarkGray #Write-Host "$($MyInvocation.MyCommand.Name) PROCESS" -ForegroundColor Green $PEBuilds = foreach ($Item in $AllPEBuilds) { #=================================================================================================== Write-Verbose '19.1.1 Get Windows Image Information' #=================================================================================================== Write-Verbose "OSMedia Full Path: $($Item.FullName)" $OSMWindowsImage = @() $OSMWindowsImage = Import-Clixml -Path "$($Item.FullName)\info\xml\Get-WindowsImage.xml" $OSMVersion = $($OSMWindowsImage.Version) Write-Verbose "Version: $OSMVersion" $OSMImageName = $($OSMWindowsImage.ImageName) Write-Verbose "ImageName: $OSMImageName" $OSMArch = $OSMWindowsImage.Architecture if ($OSMArch -eq '0') {$OSMArch = 'x86'} if ($OSMArch -eq '6') {$OSMArch = 'ia64'} if ($OSMArch -eq '9') {$OSMArch = 'x64'} if ($OSMArch -eq '12') {$OSMArch = 'x64 ARM'} Write-Verbose "Arch: $OSMArch" $OSMEditionId = $($OSMWindowsImage.EditionId) Write-Verbose "EditionId: $OSMEditionId" $OSMInstallationType = $($OSMWindowsImage.InstallationType) Write-Verbose "InstallationType: $OSMInstallationType" $OSMMajorVersion = $($OSMWindowsImage.MajorVersion) Write-Verbose "MajorVersion: $OSMMajorVersion" $OSMMinorVersion = $($OSMWindowsImage.MinorVersion) Write-Verbose "MinorVersion: $OSMMinorVersion" $OSMBuild = $($OSMWindowsImage.Build) Write-Verbose "Build: $OSMBuild" $OSMLanguages = $($OSMWindowsImage.Languages) Write-Verbose "Languages: $OSMLanguages" $OperatingSystem = '' if ($OSMMajorVersion -eq 6 -and $OSMInstallationType -eq 'Client') {$OperatingSystem = 'Windows 7'} if ($OSMMajorVersion -eq 10 -and $OSMInstallationType -eq 'Client') {$OperatingSystem = 'Windows 10'} if ($OSMMajorVersion -eq 10 -and $OSMInstallationType -eq 'Server' -and $OSMImageName -like "*2016*") {$OperatingSystem = 'Server 2016'} if ($OSMMajorVersion -eq 10 -and $OSMInstallationType -eq 'Server' -and $OSMImageName -like "*2019*") {$OperatingSystem = 'Server 2019'} $OSMUBR = $($OSMWindowsImage.UBR) Write-Verbose "UBR: $OSMUBR" $OSMFamily = $(Get-Date -Date $($OSMWindowsImage.CreatedTime)).ToString("yyyyMMddHHmmss") + $OSMEditionID Write-Verbose "OSMFamily: $OSMFamily" #$OSMGuid = $($OSMWindowsImage.OSMGuid) #=================================================================================================== #Write-Verbose '19.1.1 Gather Registry Information' #=================================================================================================== $OSMRegistry = @() if (Test-Path "$($Item.FullName)\info\xml\CurrentVersion.xml") { Write-Verbose "Registry: $($Item.FullName)\info\xml\CurrentVersion.xml" $OSMRegistry = Import-Clixml -Path "$($Item.FullName)\info\xml\CurrentVersion.xml" } else { Write-Verbose "Registry: $($Item.FullName)\info\xml\CurrentVersion.xml (Not Found)" } [string]$OSMReleaseId = $($OSMRegistry.ReleaseId) if ($OSMBuild -eq 7600) {$OSMReleaseId = 7600} if ($OSMBuild -eq 7601) {$OSMReleaseId = 7601} if ($OSMBuild -eq 10240) {$OSMReleaseId = 1507} if ($OSMBuild -eq 14393) {$OSMReleaseId = 1607} if ($OSMBuild -eq 15063) {$OSMReleaseId = 1703} if ($OSMBuild -eq 16299) {$OSMReleaseId = 1709} if ($OSMBuild -eq 17134) {$OSMReleaseId = 1803} if ($OSMBuild -eq 17763) {$OSMReleaseId = 1809} Write-Verbose "ReleaseId: $OSMReleaseId" #=================================================================================================== #Write-Verbose '19.1.1 Object Properties' #=================================================================================================== $ObjectProperties = @{ #MediaType = $Item.Parent MediaType = 'PEBuild' OSMFamily = $OSMFamily Name = $Item.Name ImageName = $OSMImageName Arch = $OSMArch ReleaseId = $OSMReleaseId Build = [string]$OSMBuild UBR = $OSMUBR Languages = $OSMWindowsImage.Languages EditionId = $OSMEditionId InstallationType = $OSMInstallationType MajorVersion = $OSMMajorVersion FullName = $Item.FullName CreatedTime = [datetime]$OSMWindowsImage.CreatedTime ModifiedTime = [datetime]$OSMWindowsImage.ModifiedTime } New-Object -TypeName PSObject -Property $ObjectProperties Write-Verbose "" } #=================================================================================================== #Write-Verbose '19.1.3 Output' #=================================================================================================== if ($GridView.IsPresent) {$PEBuilds | Select-Object MediaType,OSMFamily,Name,ImageName,Arch,ReleaseId,Build,UBR,Languages,EditionId,InstallationType,MajorVersion,FullName,CreatedTime,ModifiedTime | Sort-Object -Property Name | Out-GridView -PassThru -Title 'PEBuilds'} else {$PEBuilds | Select-Object MediaType,OSMFamily,Name,ImageName,Arch,ReleaseId,Build,UBR,Languages,EditionId,InstallationType,MajorVersion,FullName,CreatedTime,ModifiedTime | Sort-Object -Property Name} } END { #Write-Host '========================================================================================' -ForegroundColor DarkGray #Write-Host "$($MyInvocation.MyCommand.Name) END" -ForegroundColor Green } } |