Public/New-MediaISO.ps1
function New-MediaISO { [CmdletBinding()] Param ( [string]$FullName ) #============================================================================================================== # 18.10.21 Start #============================================================================================================== Write-Host "===================================================================================================" -ForegroundColor Green Write-Host "New-MediaISO" -ForegroundColor Green Write-Host "===================================================================================================" -ForegroundColor Green #============================================================================================================== # 18.10.21 Initialize OSBuilder #============================================================================================================== Get-OSBuilder -CreatePaths -HideDetails #============================================================================================================== # 18.10.21 Locate OSCDIMG #============================================================================================================== Write-Host "===================================================================================================" -ForegroundColor Cyan Write-Host "Locating OSCDIMG" -ForegroundColor Cyan if (Test-Path "$OSBuilderContent\Tools\$env:PROCESSOR_ARCHITECTURE\Oscdimg\oscdimg.exe") { $oscdimg = "$OSBuilderContent\Tools\$env:PROCESSOR_ARCHITECTURE\Oscdimg\oscdimg.exe" } elseif (Test-Path "C:\Program Files\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\$env:PROCESSOR_ARCHITECTURE\Oscdimg\oscdimg.exe") { $oscdimg = "C:\Program Files\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\$env:PROCESSOR_ARCHITECTURE\Oscdimg\oscdimg.exe" } elseif (Test-Path "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\$env:PROCESSOR_ARCHITECTURE\Oscdimg\oscdimg.exe") { $oscdimg = "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\$env:PROCESSOR_ARCHITECTURE\Oscdimg\oscdimg.exe" } else { Write-Warning "Could not locate OSCDIMG in Windows ADK at:" Write-Warning "${env:ProgramFiles(x86)}\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\Oscdimg\oscdimg.exe" Write-Warning "You can optionally copy OSCDIMG to:" Write-Warning "$OSBuilderContent\Tools\$env:PROCESSOR_ARCHITECTURE\Oscdimg\oscdimg.exe" Return } Write-Host "$oscdimg" #============================================================================================================== # 18.11.7 Validate FullName #============================================================================================================== if ($FullName) {if (!(Test-Path "$FullName")) {Write-Warning "Unable to locate $FullName"}} #============================================================================================================== # 18.10.21 Validate OSMedia OSBuilds PEBuilds has Content #============================================================================================================== $SelectedOSMedia = Get-ChildItem -Path ("$OSBuilderOSBuilds","$OSBuilderOSMedia","$OSBuilderPEBuilds") -Directory | Select-Object -Property Parent, Name, FullName, LastWriteTime, CreationTime | Sort-Object LastWriteTime -Descending if ($null -eq $SelectedOSMedia) { Write-Warning "OSMedia or OSBuilds content not found. Use Import-OSMedia to import an Operating System first . . . Exiting!" Break } #============================================================================================================== # Validate OSMedia, OSBuilds PEBuilds has *.wim 18.10.17 #============================================================================================================== $SelectedOSMedia = $SelectedOSMedia | Where-Object {Test-Path $(Join-Path $_.FullName (Join-Path "OS" (Join-Path "sources" "*.wim")))} #$SelectedOSMedia = $SelectedOSMedia | Where-Object {Test-Path $(Join-Path $_.FullName (Join-Path "OS" (Join-Path "sources" "install.wim")))} if ($null -eq $SelectedOSMedia) { Write-Warning "OSMedia or OSBuilds Install.wim not found. Use Import-OSMedia to import an Operating System first . . . Exiting!" Break } #============================================================================================================== # Validate OSMedia was imported with Import-OSMedia #============================================================================================================== $SelectedOSMedia = $SelectedOSMedia | Where-Object {Test-Path $(Join-Path $_.FullName "WindowsImage.txt")} if ($null -eq $SelectedOSMedia) { Write-Warning "OSMedia or OSBuilds content invalid (missing WindowsImage.txt). Use Import-OSMedia to import an Operating System first . . . Exiting!" Return } #============================================================================================================== # Select Source OSMedia #============================================================================================================== if ($FullName) { $SelectedOSMedia = $SelectedOSMedia | Where-Object {$_.FullName -eq $FullName} } else { $SelectedOSMedia = $SelectedOSMedia | Out-GridView -Title "Select one or more OSMedia or OSBuilds to create an ISO's and press OK (Cancel to Exit)" -PassThru } if($null -eq $SelectedOSMedia) { Write-Warning "Source OSMedia or OSBuild was not selected . . . Exiting!" Return } foreach ($Media in $SelectedOSMedia) { $ISOSourceFolder = "$($Media.FullName)\OS" $ISODestinationFolder = "$($Media.FullName)\ISO" if (!(Test-Path $ISODestinationFolder)) {New-Item $ISODestinationFolder -ItemType Directory -Force | Out-Null} #$ISOFile = "$ISODestinationFolder\$($Media.Name).iso" $WindowsImage = Get-Content -Path "$($Media.FullName)\info\json\Get-WindowsImage.json" $WindowsImage = $WindowsImage | ConvertFrom-Json $OSImageDescription = $($WindowsImage.ImageName) $OSArchitecture = $($WindowsImage.Architecture) if ($OSArchitecture -eq 0) {$OSArchitecture = 'x86'} elseif ($OSArchitecture -eq 1) {$OSArchitecture = 'MIPS'} elseif ($OSArchitecture -eq 2) {$OSArchitecture = 'Alpha'} elseif ($OSArchitecture -eq 3) {$OSArchitecture = 'PowerPC'} elseif ($OSArchitecture -eq 6) {$OSArchitecture = 'ia64'} elseif ($OSArchitecture -eq 9) {$OSArchitecture = 'x64'} $UBR = $($WindowsImage.UBR) $OSImageName = $OSImageDescription $OSImageName = $OSImageName -replace "Microsoft Windows Recovery Environment", "WinPE" $OSImageName = $OSImageName -replace "Windows 10", "Win10" $OSImageName = $OSImageName -replace "Enterprise", "Ent" $OSImageName = $OSImageName -replace "Education", "Edu" $OSImageName = $OSImageName -replace "Virtual Desktops", "VD" $OSImageName = $OSImageName -replace " for ", " " $OSImageName = $OSImageName -replace "Workstations", "Wks" $OSImageName = $OSImageName -replace "Windows Server 2016", "Svr2016" $OSImageName = $OSImageName -replace "Windows Server 2019", "Svr2019" $OSImageName = $OSImageName -replace "ServerStandardACore", "Std Core" $OSImageName = $OSImageName -replace "ServerDatacenterACore", "DC Core" $OSImageName = $OSImageName -replace "ServerStandardCore", "Std Core" $OSImageName = $OSImageName -replace "ServerDatacenterCore", "DC Core" $OSImageName = $OSImageName -replace "ServerStandard", "Std" $OSImageName = $OSImageName -replace "ServerDatacenter", "DC" $OSImageName = $OSImageName -replace "Standard", "Std" $OSImageName = $OSImageName -replace "Datacenter", "DC" $OSImageName = $OSImageName -replace 'Desktop Experience', 'DTE' $OSImageName = $OSImageName -replace '\(', '' $OSImageName = $OSImageName -replace '\)', '' if ($($Media.FullName) -like "*PEBuilds*") { $OSImageName = "WinPE $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\WinPE $OSArchitecture $UBR.iso" } elseif ($($Media.FullName) -like "*OSMedia*") { if ($OSImageName -like "*Win10*") { $OSImageName = "OSMedia Win10 $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\OSMedia Win10 $OSArchitecture $UBR.iso" } elseif ($OSImageName -like "*2016*") { $OSImageName = "OSMedia Svr2016 $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\OSMedia Svr2016 $OSArchitecture $UBR.iso" } elseif ($OSImageName -like "*2019*") { $OSImageName = "OSMedia Svr2019 $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\OSMedia Svr2019 $OSArchitecture $UBR.iso" } else { $OSImageName = "OSMedia WinOS $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\OSMedia WinOS $OSArchitecture $UBR.iso" } } elseif ($($Media.FullName) -like "*OSBuilds*") { if ($OSImageName -like "*Win10*") { $OSImageName = "OSBuild Win10 $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\OSBuild Win10 $OSArchitecture $UBR.iso" } elseif ($OSImageName -like "*2016*") { $OSImageName = "OSBuild Svr2016 $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\OSBuild Svr2016 $OSArchitecture $UBR.iso" } elseif ($OSImageName -like "*2019*") { $OSImageName = "OSBuild Svr2019 $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\OSBuild Svr2019 $OSArchitecture $UBR.iso" } else { $OSImageName = "OSBuild WinOS $OSArchitecture $UBR" $ISOFile = "$ISODestinationFolder\OSBuild WinOS $OSArchitecture $UBR.iso" } } # 32 character limit for a Label # 23 = Win10 Edu x64 17134.112 # 25 = Win10 Edu N x64 17134.112 # 23 = Win10 Ent x64 17134.112 # 25 = Win10 Ent N x64 17134.112 # 23 = Win10 Pro x64 17134.112 # 27 = Win10 Pro Edu x64 17134.112 # 29 = Win10 Pro EduN x64 17134.112 # 27 = Win10 Pro Wks x64 17134.112 # 26 = Win10 Pro N x64 17134.112 # 29 = Win10 Pro N Wks x64 17134.112 $ISOLabel = '-l"{0}"' -f $OSImageName $ISOFolder = "$($Media.FullName)\ISO" if (!(Test-Path $ISOFolder)) {New-Item -Path $ISOFolder -ItemType Directory -Force | Out-Null} if (!(Test-Path $ISOSourceFolder)) { Write-Warning "Could not locate $ISOSourceFolder" Write-Warning "Make sure you have proper OS before using New-MediaISO" Return } $etfsboot = "$ISOSourceFolder\boot\etfsboot.com" if (!(Test-Path $etfsboot)) { Write-Warning "Could not locate $etfsboot" Write-Warning "Make sure you have proper OS before using New-MediaISO" Return } $efisys = "$ISOSourceFolder\efi\microsoft\boot\efisys.bin" if (!(Test-Path $efisys)) { Write-Warning "Could not locate $efisys" Write-Warning "Make sure you have proper OS before using New-MediaISO" Return } Write-Host "Label: $OSImageName" -ForegroundColor Cyan Write-Host "Creating: $ISOFile" -ForegroundColor Cyan $data = '2#p0,e,b"{0}"#pEF,e,b"{1}"' -f $etfsboot, $efisys start-process $oscdimg -args @("-m","-o","-u2","-bootdata:$data",'-u2','-udfver102',$ISOLabel,"`"$ISOSourceFolder`"", "`"$ISOFile`"") -Wait } #============================================================================================================== Write-Host "===================================================================================================" -ForegroundColor Green Write-Host "Complete!" -ForegroundColor Green Write-Host "===================================================================================================" -ForegroundColor Green #============================================================================================================== } |