Public/New-OSDCloudOSMedia.ps1
function New-OSDCloudOSMedia { [CmdletBinding()] param ( #Pauses the function the Install.wim is dismounted #Useful for Testing [Alias('PauseOS','PauseDismount')] [switch]$PauseDismountOS, #Pauses the function before WinPE is dismounted #Useful for Testing [Alias('PausePE')] [switch]$PauseDismountPE ) Begin { #======================================================================= # Get-OSDBuilder #======================================================================= Get-OSDBuilder -CreatePaths -HideDetails #======================================================================= # Block #======================================================================= Block-WinPE Block-StandardUser Block-WindowsVersionNe10 Block-PowerShellVersionLt5 Block-NoCurl #======================================================================= } Process { Write-Host '========================================================================================' -ForegroundColor DarkGray Write-Host -ForegroundColor Green "$($MyInvocation.MyCommand.Name) PROCESS" Write-Verbose "MyInvocation.MyCommand.Name: $($MyInvocation.MyCommand.Name)" Write-Verbose "PSCmdlet.ParameterSetName: $($PSCmdlet.ParameterSetName)" #======================================================================= # OSDCloud #======================================================================= $BirdBox = @() $BirdBox = Get-OSMedia -OSMajorVersion 10 | Where-Object {$_.MediaType -eq 'OSImport'} | Where-Object {$_.RegBuild -ge 19041} $BirdBox = $BirdBox | Out-GridView -PassThru -Title "Select one or more OSImport to Build (Cancel to Exit) and press OK" if ($null -eq $BirdBox) { Write-Warning "Could not find a matching OSImport . . . Exiting!" Return } foreach ($Bird in $BirdBox) { #======================================================================= # Set Paths #======================================================================= if (Test-Path "$SetOSDBuilderPathOSImport\$($Bird.Name)") {$OSMediaPath = "$SetOSDBuilderPathOSImport\$($Bird.Name)"} $OSImagePath = "$OSMediaPath\OS\sources\install.wim" if (!(Test-Path "$OSMediaPath\WindowsImage.txt")) { Write-Host '========================================================================================' -ForegroundColor DarkGray if ($null -eq $OSMediaPath) { Write-Warning "Unable to find an OSMedia to use" } else { Write-Warning "$OSMediaPath is not a valid OSMedia Directory" } Return } if (!(Test-Path "$OSImagePath")) { Write-Host '========================================================================================' -ForegroundColor DarkGray Write-Warning "$OSImagePath is not a valid Windows Image" Return } #======================================================================= # Get Windows Image Information #======================================================================= $OSImageIndex = 1 $WindowsImage = Get-WindowsImage -ImagePath "$OSImagePath" -Index $OSImageIndex | Select-Object -Property * $OSImageName = ($WindowsImage).ImageName $OSImageName = $OSImageName -replace '\(', '' $OSImageName = $OSImageName -replace '\)', '' $OSImageDescription = ($WindowsImage).ImageDescription $OSArchitecture = $($WindowsImage.Architecture) if ($OSArchitecture -eq '0') {$OSArchitecture = 'x86'} if ($OSArchitecture -eq '6') {$OSArchitecture = 'ia64'} if ($OSArchitecture -eq '9') {$OSArchitecture = 'x64'} if ($OSArchitecture -eq '12') {$OSArchitecture = 'x64 ARM'} $OSEditionID = $($WindowsImage.EditionId) $OSInstallationType = $($WindowsImage.InstallationType) $OSLanguages = $($WindowsImage.Languages) $OSVersion = $($WindowsImage.Version) $OSMajorVersion = $($WindowsImage.MajorVersion) $OSMinorVersion = $($WindowsImage.MinorVersion) $OSBuild = $($WindowsImage.Build) $OSSPBuild = $($WindowsImage.SPBuild) $OSSPLevel = $($WindowsImage.SPLevel) $OSImageBootable = $($WindowsImage.ImageBootable) $OSWIMBoot = $($WindowsImage.WIMBoot) $OSCreatedTime = $($WindowsImage.CreatedTime) $OSModifiedTime = $($WindowsImage.ModifiedTime) Show-MediaImageInfoOS #======================================================================= # Get Adk Paths #======================================================================= if ($OSArchitecture -eq 'x64') { $AdkPaths = Get-AdkPaths -Arch 'amd64' } else { $AdkPaths = Get-AdkPaths -Arch 'x86' } if ($null -eq $AdkPaths) { Write-Host -ForegroundColor DarkGray "=========================================================================" Write-Warning "Could not get ADK going, sorry" Write-Host -ForegroundColor DarkGray "=========================================================================" Break } #======================================================================= # ADK Packages #======================================================================= $ErrorActionPreference = 'Ignore' $WinPEOCs = $AdkPaths.WinPEOCs $OCPackages = @( 'WMI' 'HTA' 'NetFx' 'Scripting' 'PowerShell' 'SecureStartup' 'DismCmdlets' 'Dot3Svc' 'EnhancedStorage' 'FMAPI' 'GamingPeripherals' 'PPPoE' 'PlatformId' 'PmemCmdlets' 'RNDIS' 'SecureBootCmdlets' 'StorageWMI' 'WDS-Tools' ) #======================================================================= # Validate Registry CurrentVersion.xml' #======================================================================= $RegValueCurrentBuild = $null if (Test-Path "$OSMediaPath\info\xml\CurrentVersion.xml") { $RegKeyCurrentVersion = Import-Clixml -Path "$OSMediaPath\info\xml\CurrentVersion.xml" [string]$RegValueCurrentBuild = ($RegKeyCurrentVersion).CurrentBuild [string]$RegValueDisplayVersion = ($RegKeyCurrentVersion).DisplayVersion [string]$ReleaseId = ($RegKeyCurrentVersion).ReleaseId if ($RegValueDisplayVersion) {$ReleaseId = $RegValueDisplayVersion} } #======================================================================= Write-Verbose '19.1.1 Set ReleaseId' #======================================================================= if ($null -ne $RegValueCurrentBuild) {$OSBuild = $RegValueCurrentBuild} if ($null -eq $ReleaseId) { if ($OSBuild -eq 7600) {$ReleaseId = 7600} if ($OSBuild -eq 7601) {$ReleaseId = 7601} if ($OSBuild -eq 9600) {$ReleaseId = 9600} if ($OSBuild -eq 10240) {$ReleaseId = 1507} if ($OSBuild -eq 14393) {$ReleaseId = 1607} if ($OSBuild -eq 15063) {$ReleaseId = 1703} if ($OSBuild -eq 16299) {$ReleaseId = 1709} if ($OSBuild -eq 17134) {$ReleaseId = 1803} if ($OSBuild -eq 17763) {$ReleaseId = 1809} #if ($OSBuild -eq 18362) {$ReleaseId = 1903} #if ($OSBuild -eq 18363) {$ReleaseId = 1909} #if ($OSBuild -eq 19041) {$ReleaseId = 2004} #if ($OSBuild -eq 19042) {$ReleaseId = '20H2'} #if ($OSBuild -eq 19043) {$ReleaseId = '21H1'} #if ($OSBuild -eq 19044) {$ReleaseId = '21H2'} } Write-Verbose "ReleaseId: $ReleaseId" Write-Verbose "CurrentBuild: $RegValueCurrentBuild" #================================================= # Operating System #================================================= $UpdateOS = '' if ($OSMajorVersion -eq 10) { if ($OSInstallationType -match 'Server') { $UpdateOS = 'Windows Server' } else { if ($OSImageName -match ' 11 ') { $UpdateOS = 'Windows 11' } else { $UpdateOS = 'Windows 10' } } } #======================================================================= #WorkingName and WorkingPath' #======================================================================= if ($Bird.Name -match 'OSDCloud') { $WorkingName = $Bird.Name } else { $WorkingName = "$($Bird.Name) OSDCloud" } $WorkingPath = "$SetOSDBuilderPathOSMedia\$WorkingName" #======================================================================= Write-Verbose '19.1.1 Remove Existing OSMedia' #======================================================================= if (Test-Path $WorkingPath) { Write-Host '========================================================================================' -ForegroundColor DarkGray Write-Warning "$WorkingPath will be replaced!" } #======================================================================= Write-Verbose '19.1.25 Remove Existing WorkingPath' #======================================================================= if (Test-Path $WorkingPath) { Write-Host '========================================================================================' -ForegroundColor DarkGray Remove-Item -Path "$WorkingPath" -Force -Recurse } #======================================================================= Write-Verbose '19.2.25 Set Variables' #======================================================================= $MountDirectory = Join-Path $SetOSDBuilderPathMount "os$((Get-Date).ToString('yyMMddhhmm'))" $MountWinPE = Join-Path $SetOSDBuilderPathMount "winpe$((Get-Date).ToString('yyMMddhhmm'))" $MountWinRE = Join-Path $SetOSDBuilderPathMount "winre$((Get-Date).ToString('yyMMddhhmm'))" $MountWinSE = Join-Path $SetOSDBuilderPathMount "setup$((Get-Date).ToString('yyMMddhhmm'))" $Info = Join-Path $WorkingPath 'info' $Logs = Join-Path $Info 'logs' $OS = Join-Path $WorkingPath 'OS' $WimTemp = Join-Path $WorkingPath "WimTemp" $WinPE = Join-Path $WorkingPath 'WinPE' $PEInfo = Join-Path $WinPE 'info' $PELogs = Join-Path $PEInfo 'logs' #======================================================================= # Start Transcript #======================================================================= $ScriptName = $($MyInvocation.MyCommand.Name) $LogName = "$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$ScriptName.log" Start-Transcript -Path (Join-Path "$Info\logs" $LogName) | Out-Null #======================================================================= # Update-OSMedia and New-OSBuild #======================================================================= New-DirectoriesOSMedia Show-WorkingInfoOS Copy-MediaOperatingSystem #======================================================================= # Mount WinPE #======================================================================= Mount-WinPEwim -OSMediaPath "$WorkingPath" Mount-WinREwim -OSMediaPath "$WorkingPath" Mount-WinSEwim -OSMediaPath "$WorkingPath" #======================================================================= # WinPE ADK #======================================================================= $TemplateLogs = $Logs Write-Host -ForegroundColor DarkGray "=========================================================================" Write-Host -ForegroundColor Cyan "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Adding default en-US ADK Packages" Write-Host -ForegroundColor Yellow "Dism Function: Add-WindowsPackage" $Lang = 'en-us' foreach ($Package in $OCPackages) { $SourceFile = "$WinPEOCs\WinPE-$Package.cab" if (Test-Path $SourceFile) { Write-Host -ForegroundColor DarkGray "$SourceFile" $PackageName = "Add-WindowsPackage-WinPE-$Package" $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinPE.log" Try {Add-WindowsPackage -Path $MountWinPE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinRE.log" Try {Add-WindowsPackage -Path $MountWinRE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinSE.log" Try {Add-WindowsPackage -Path $MountWinSE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} } } $SourceFile = "$WinPEOCs\$Lang\lp.cab" if (Test-Path $SourceFile) { Write-Host -ForegroundColor DarkGray "$SourceFile" $PackageName = "Add-WindowsPackage-WinPE-lp_$Lang" $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinPE.log" Try {Add-WindowsPackage -Path $MountWinPE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinRE.log" Try {Add-WindowsPackage -Path $MountWinRE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinSE.log" Try {Add-WindowsPackage -Path $MountWinSE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} } else { Write-Warning "Could not find $SourceFile" } foreach ($Package in $OCPackages) { $SourceFile = "$WinPEOCs\$Lang\WinPE-$Package`_$Lang.cab" if (Test-Path $SourceFile) { Write-Host -ForegroundColor DarkGray "$SourceFile" $PackageName = "Add-WindowsPackage-WinPE-$Package`_$Lang" $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinPE.log" Try {Add-WindowsPackage -Path $MountWinPE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinRE.log" Try {Add-WindowsPackage -Path $MountWinRE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$PackageName WinSE.log" Try {Add-WindowsPackage -Path $MountWinSE -PackagePath $SourceFile -LogPath "$CurrentLog" | Out-Null} Catch {Write-Host -ForegroundColor Red $CurrentLog} } } #======================================================================= # Save-WindowsImage #======================================================================= Write-Host -ForegroundColor DarkGray "=========================================================================" Write-Host -ForegroundColor Cyan "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Save Windows Image" Write-Host -ForegroundColor Yellow "Dism Function: Save-WindowsImage" $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Save-WindowsImage.log" Save-WindowsImage -Path $MountWinPE -LogPath $CurrentLog | Out-Null $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Save-WindowsImage.log" Save-WindowsImage -Path $MountWinRE -LogPath $CurrentLog | Out-Null $CurrentLog = "$TemplateLogs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Save-WindowsImage.log" Save-WindowsImage -Path $MountWinSE -LogPath $CurrentLog | Out-Null #======================================================================= # WinPE DaRT #======================================================================= Write-Host -ForegroundColor DarkGray "=========================================================================" Write-Host -ForegroundColor Cyan "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Microsoft DaRT" $SourceFile = "C:\Program Files\Microsoft DaRT\v10\Tools$OSArchitecture.cab" if (Test-Path $SourceFile) { Write-Host -ForegroundColor DarkGray $SourceFile expand.exe "$SourceFile" -F:*.* "$MountWinPE" | Out-Null expand.exe "$SourceFile" -F:*.* "$MountWinRE" | Out-Null expand.exe "$SourceFile" -F:*.* "$MountWinSE" | Out-Null $SourceFile = "C:\Program Files\Microsoft Deployment Toolkit\Templates\DartConfig8.dat" if (Test-Path $SourceFile) { Write-Host -ForegroundColor DarkGray $SourceFile Copy-Item -Path $SourceFile -Destination "$MountWinPE\Windows\System32\DartConfig.dat" -Force Copy-Item -Path $SourceFile -Destination "$MountWinRE\Windows\System32\DartConfig.dat" -Force Copy-Item -Path $SourceFile -Destination "$MountWinSE\Windows\System32\DartConfig.dat" -Force } else { Write-Warning "Could not find $SourceFile" } } else { Write-Warning "Could not find $SourceFile" } if (Test-Path "$MountWinPE\Windows\System32\winpeshl.ini") {Remove-Item -Path "$MountWinPE\Windows\System32\winpeshl.ini" -Force} (Get-Content "$MountWinRE\Windows\System32\winpeshl.ini") | ForEach-Object {$_ -replace '-prompt','-network'} | Out-File "$MountWinRE\Windows\System32\winpeshl.ini" if (Test-Path "$MountWinSE\Windows\System32\winpeshl.ini") {Remove-Item -Path "$MountWinSE\Windows\System32\winpeshl.ini" -Force} #======================================================================= # WinPE Content #======================================================================= $WinPEAutoExtraFiles = $true Import-AutoExtraFilesPE $WinPEOSDCloud = $true Enable-WinPEOSDCloud $WinREWiFi = $true Enable-WinREWiFi #======================================================================= # Update-OSMedia and New-OSBuild #======================================================================= Save-PackageInventoryPE -OSMediaPath "$WorkingPath" if ($PauseDismountPE.IsPresent){[void](Read-Host 'Press Enter to Continue')} Dismount-WimsPE -OSMediaPath "$WorkingPath" Export-PEWims -OSMediaPath "$WorkingPath" Export-PEBootWim -OSMediaPath "$WorkingPath" Save-InventoryPE -OSMediaPath "$WorkingPath" #======================================================================= # Install.wim #======================================================================= $global:ReapplyLCU = $false Mount-InstallwimOS Set-WinREWimOS #======================================================================= # Install.wim UBR Pre-Update #======================================================================= Show-ActionTime Write-Host -ForegroundColor Green "OS: Mount Registry for UBR Information" $RegKeyCurrentVersion = Get-RegCurrentVersion -Path $MountDirectory $RegValueDisplayVersion = ($RegKeyCurrentVersion).DisplayVersion $ReleaseId = ($RegKeyCurrentVersion).ReleaseId if ($RegValueDisplayVersion) {$ReleaseId = $RegValueDisplayVersion} if ($($RegKeyCurrentVersion.CurrentBuild)) {$RegValueCurrentBuild = $($RegKeyCurrentVersion.CurrentBuild)} else {$RegValueCurrentBuild = $OSSPBuild} if ($($RegKeyCurrentVersion.UBR)) {$RegValueUbr = $($RegKeyCurrentVersion.UBR)} else {$RegValueUbr = $OSSPBuild} $UBR = "$RegValueCurrentBuild.$RegValueUbr" Save-RegistryCurrentVersionOS $UBRPre = $UBR #======================================================================= # Optional Content #======================================================================= Add-ContentPack -PackType OSCapability Add-ContentPack -PackType OSPackages Add-WindowsPackageOS Add-FeaturesOnDemandOS #======================================================================= # Install.wim UBR Post-Update #======================================================================= $RegKeyCurrentVersion = Get-RegCurrentVersion -Path $MountDirectory $RegValueDisplayVersion = ($RegKeyCurrentVersion).DisplayVersion $ReleaseId = ($RegKeyCurrentVersion).ReleaseId if ($RegValueDisplayVersion) {$ReleaseId = $RegValueDisplayVersion} if ($($RegKeyCurrentVersion.CurrentBuild)) {$RegValueCurrentBuild = $($RegKeyCurrentVersion.CurrentBuild)} else {$RegValueCurrentBuild = $OSSPBuild} if ($($RegKeyCurrentVersion.UBR)) {$RegValueUbr = $($RegKeyCurrentVersion.UBR)} else {$RegValueUbr = $OSSPBuild} $UBR = "$RegValueCurrentBuild.$RegValueUbr" Save-RegistryCurrentVersionOS Show-ActionTime Write-Host -ForegroundColor Green "OS: Update Build Revision $UBR (Post-LCU)" #======================================================================= # OneDriveSetup #======================================================================= if ($OSMajorVersion -eq 10 -and $OSInstallationType -eq 'Client') { Show-ActionTime Write-Host -ForegroundColor Green "OS: Update OneDriveSetup.exe" $OneDriveSetupDownload = $false $OneDriveSetup = Join-Path $GetOSDBuilderPathContentOneDrive 'OneDriveSetup.exe' if (!(Test-Path $OneDriveSetup)) {$OneDriveSetupDownload = $true} if (Test-Path $OneDriveSetup) { if (!(([System.Io.fileinfo]$OneDriveSetup).LastWriteTime.Date -ge [datetime]::Today )) { $OneDriveSetupDownload = $true } } <# if ($OneDriveSetupDownload -eq $true) { $WebClient = New-Object System.Net.WebClient Write-Host "Downloading to $OneDriveSetup" -ForegroundColor Gray $WebClient.DownloadFile('https://go.microsoft.com/fwlink/p/?LinkId=248256',"$OneDriveSetup") } #> if ($OSArchitecture -eq 'x86') { $OneDriveSetupInfo = Get-Item -Path "$MountDirectory\Windows\System32\OneDriveSetup.exe" | Select-Object -Property * Write-Host -ForegroundColor Gray " Existing Image Version $($($OneDriveSetupInfo).VersionInfo.ProductVersion)" if (Test-Path $OneDriveSetup) { robocopy "$GetOSDBuilderPathContentOneDrive" "$MountDirectory\Windows\System32" OneDriveSetup.exe /ndl /xx /b /np /ts /tee /r:0 /w:0 /Log+:"$Info\logs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Update-OneDriveSetup.log" | Out-Null $OneDriveSetupInfo = Get-Item -Path "$MountDirectory\Windows\System32\OneDriveSetup.exe" | Select-Object -Property * Write-Host -ForegroundColor Gray " Updating with Version $($($OneDriveSetupInfo).VersionInfo.ProductVersion)" } } else { $OneDriveSetupInfo = Get-Item -Path "$MountDirectory\Windows\SysWOW64\OneDriveSetup.exe" | Select-Object -Property * Write-Host -ForegroundColor Gray " Existing Image Version $($($OneDriveSetupInfo).VersionInfo.ProductVersion)" if (Test-Path $OneDriveSetup) { robocopy "$GetOSDBuilderPathContentOneDrive" "$MountDirectory\Windows\SysWOW64" OneDriveSetup.exe /ndl /xx /b /np /ts /tee /r:0 /w:0 /Log+:"$Info\logs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Update-OneDriveSetup.log" | Out-Null $OneDriveSetupInfo = Get-Item -Path "$MountDirectory\Windows\SysWOW64\OneDriveSetup.exe" | Select-Object -Property * Write-Host -ForegroundColor Gray " Updating with Version $($($OneDriveSetupInfo).VersionInfo.ProductVersion)" } } Write-Host -ForegroundColor Cyan " To update OneDriveSetup.exe use one of the following commands:" Write-Host -ForegroundColor Cyan " Save-OSDBuilderDownload -ContentDownload 'OneDriveSetup Enterprise'" Write-Host -ForegroundColor Cyan " Save-OSDBuilderDownload -ContentDownload 'OneDriveSetup Production'" } #======================================================================= # Content #======================================================================= Enable-WindowsOptionalFeatureOS Enable-NetFXOS Remove-AppxProvisionedPackageOS Remove-WindowsPackageOS Remove-WindowsCapabilityOS Disable-WindowsOptionalFeatureOS Add-ContentDriversOS Add-ContentExtraFilesOS Add-ContentStartLayout Add-ContentUnattend Add-ContentScriptsOS Import-RegistryRegOS Import-RegistryXmlOS Add-ContentPack -PackType OSDrivers Add-ContentPack -PackType OSExtraFiles Add-ContentPack -PackType OSPoshMods Add-ContentPack -PackType OSRegistry Add-ContentPack -PackType OSScripts Add-ContentPack -PackType OSStartLayout #======================================================================= # Mirror OSMedia and OSBuild #======================================================================= Save-AutoExtraFilesOS -OSMediaPath "$WorkingPath" Save-SessionsXmlOS -OSMediaPath "$WorkingPath" Save-InventoryOS -OSMediaPath "$WorkingPath" #======================================================================= # Dismount #======================================================================= if ($PauseDismountOS.IsPresent){[void](Read-Host 'Press Enter to Continue')} Dismount-InstallwimOS Export-InstallwimOS #======================================================================= Write-Verbose '19.1.1 OS: Export Configuration' #======================================================================= Show-ActionTime Write-Host -ForegroundColor Green "OS: Export Configuration to $WorkingPath\WindowsImage.txt" $GetWindowsImage = @() $GetWindowsImage = Get-WindowsImage -ImagePath "$OS\sources\install.wim" -Index 1 | Select-Object -Property * Write-Verbose "========== SPBuild: $($GetWindowsImage.Build).$($GetWindowsImage.SPBuild)" if ($OSVersion -like "6.*") { Write-Verbose '========== Windows 6.x' $UBR = "$($GetWindowsImage.Build).$($GetWindowsImage.SPBuild)" } Write-Verbose "========== UBR: $UBR" $GetWindowsImage | Add-Member -Type NoteProperty -Name "UBR" -Value $UBR $GetWindowsImage | Out-File "$WorkingPath\WindowsImage.txt" $GetWindowsImage | Out-File "$Info\logs\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Get-WindowsImage.txt" $GetWindowsImage | Export-Clixml -Path "$Info\xml\Get-WindowsImage.xml" $GetWindowsImage | Export-Clixml -Path "$Info\xml\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Get-WindowsImage.xml" $GetWindowsImage | ConvertTo-Json | Out-File "$Info\json\Get-WindowsImage.json" $GetWindowsImage | ConvertTo-Json | Out-File "$Info\json\$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Get-WindowsImage.json" (Get-Content "$WorkingPath\WindowsImage.txt") | Where-Object {$_.Trim(" `t")} | Set-Content "$WorkingPath\WindowsImage.txt" #======================================================================= # OSD-Export #======================================================================= #Save-WindowsImageContentPE #======================================================================= Write-Verbose '19.3.17 UBR Validation' #======================================================================= if ($MyInvocation.MyCommand.Name -eq 'Update-OSMedia') { if ($UBRPre -eq $UBR) { Write-Host '========================================================================================' -ForegroundColor DarkGray Write-Warning 'The Update Build Revision did not change after Windows Updates' Write-Warning 'There may have been an issue applying the Latest Cumulative Update if this was not expected' } } if (!($UBR)) { Write-Host '========================================================================================' -ForegroundColor DarkGray $UBR = $((Get-Date).ToString('yyMMddhhmm')) Write-Warning 'Could not determine a UBR' } #======================================================================= # Remove Temporary Files #======================================================================= if (Test-Path "$WimTemp") {Remove-Item -Path "$WimTemp" -Force -Recurse | Out-Null} if (Test-Path "$MountDirectory") {Remove-Item -Path "$MountDirectory" -Force -Recurse | Out-Null} if (Test-Path "$MountWinRE") {Remove-Item -Path "$MountWinRE" -Force -Recurse | Out-Null} if (Test-Path "$MountWinPE") {Remove-Item -Path "$MountWinPE" -Force -Recurse | Out-Null} if (Test-Path "$MountWinSE") {Remove-Item -Path "$MountWinSE" -Force -Recurse | Out-Null} #======================================================================= # OSD-Export #======================================================================= Save-WindowsImageContentOS Save-VariablesOSD #======================================================================= # Create ISO #======================================================================= New-OSDBuilderISO -FullName "$WorkingPath" #======================================================================= # Complete Build #======================================================================= Stop-Transcript | Out-Null } } End {} } |