private/MDT/pwsh/Step-BuildMediaAddWallpaper.ps1
|
function Step-BuildMediaAddWallpaper { <# .SYNOPSIS Embeds the OSDeploy wallpaper into a mounted WinPE or WinRE image. .DESCRIPTION Writes the OSDeploy-branded winpe.jpg to the mounted image's System32 folder and, for WinRE images, injects an INF driver that sets the WinPE CustomBackground registry value so the wallpaper is displayed during the PE boot sequence. .PARAMETER Architecture Target processor architecture. Defaults to $global:BuildMedia.Architecture. .PARAMETER MountPath Path to the directory where the WIM image is mounted. Defaults to $global:BuildMedia.MountPath. .PARAMETER WimSourceType Type of the mounted image: 'WinPE' or 'WinRE'. Defaults to $global:BuildMedia.WimSourceType. .EXAMPLE Step-BuildMediaAddWallpaper Embeds the wallpaper using values from the global BuildMedia hashtable. .EXAMPLE Step-BuildMediaAddWallpaper -MountPath 'C:\Mount' -WimSourceType 'WinRE' Injects the wallpaper and registry INF into a WinRE image mounted at C:\Mount. .INPUTS None. This function does not accept pipeline input. .OUTPUTS None. .NOTES Author: David Segura Company: Recast Software Called by Invoke-OSDeployMDT during the WIM stage. #> [CmdletBinding()] param ( [System.String] $Architecture = $global:BuildMedia.Architecture, [System.String] $MountPath = $global:BuildMedia.MountPath, [System.String] $WimSourceType = $global:BuildMedia.WimSourceType ) #================================================= $Error.Clear() Write-Verbose "[$(Get-Date -format s)] Start" #================================================= Write-Verbose "[$(Get-Date -format s)] Architecture: $Architecture" Write-Verbose "[$(Get-Date -format s)] MountPath: $MountPath" Write-Verbose "[$(Get-Date -format s)] WimSourceType: $WimSourceType" #================================================= $InfWinpeJpg = @' [Version] Signature = "$WINDOWS NT$" Class = System ClassGuid = {4D36E97d-E325-11CE-BFC1-08002BE10318} Provider = OSDeploy DriverVer = 07/20/2021,2021.07.20.0 [DefaultInstall] AddReg = AddReg [AddReg] ;rootkey,[subkey],[value],[flags],[data] ;0x00000 REG_SZ ;0x00001 REG_BINARY ;0x10000 REG_MULTI_SZ ;0x20000 REG_EXPAND_SZ ;0x10001 REG_DWORD ;0x20001 REG_NONE HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE",CustomBackground,0x10000,"X:\Windows\System32\winpe.jpg" '@ #================================================= if ($WimSourceType -eq 'WinRE') { <# $bytes = [System.IO.File]::ReadAllBytes("C:\Users\DavidSegura\Downloads\winpe.jpg") $base64 = [Convert]::ToBase64String($bytes) $base64 | Set-Clipboard #> $Wallpaper = '/9j/4AAQSkZJRgABAgEAYABgAAD//gASTEVBRFRPT0xTIHYyMy4wAP/bAIQABQUFCAUIDAcHDAwJCQkMDQwMDAwNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQEFCAgKBwoMBwcMDQwKDA0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0N/8QBogAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoLAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+hEAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/8AAEQgAIAAgAwERAAIRAQMRAf/aAAwDAQACEQMRAD8A42v6PPxQKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA//9k=' Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] Updating WinRE Wallpaper $MountPath\Windows\System32\winpe.jpg" [byte[]]$Bytes = [convert]::FromBase64String($Wallpaper) [System.IO.File]::WriteAllBytes("$env:TEMP\winpe.jpg", $Bytes) $null = robocopy.exe "$env:TEMP" "$MountPath\Windows\System32" winpe.jpg /b /ndl /np /r:0 /w:0 /xj /mt:128 /LOG+:$global:BuildMedia.LogsPath\Step-BuildMediaAddWallpaper.log <# Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] Adding default WinRE Wallpaper $MountPath\Windows\System32\winpe.jpg" # Default color $Wallpaper = '/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAgACADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5vooor+sD+KwooooAKKKKACiiigD/2Q==' # HP color # $Wallpaper = '/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAgACADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD4Pooor/Vw/jsKKKKACiiigAooooA//9k=' [byte[]]$Bytes = [convert]::FromBase64String($Wallpaper) [System.IO.File]::WriteAllBytes("$env:TEMP\winpe.jpg", $Bytes) [System.IO.File]::WriteAllBytes("$env:TEMP\winre.jpg", $Bytes) $null = robocopy.exe "$env:TEMP" "$MountPath\Windows\System32" winpe.jpg /b /ndl /np /r:0 /w:0 /xj /mt:128 /LOG+:$global:BuildMedia.LogsPath\Step-BuildMediaAddWallpaper.log # $null = robocopy.exe "$env:TEMP" "$MountPath\Windows\System32" winre.jpg /b /ndl /np /r:0 /w:0 /xj /mt:128 /LOG+:$global:BuildMedia.LogsPath\Step-BuildMediaAddWallpaper.log #> # Inject the WinRE Wallpaper Driver $InfFile = "$env:Temp\Set-WinREWallpaper.inf" $null = New-Item -Path $InfFile -Force Set-Content -Path $InfFile -Value $InfWinpeJpg -Encoding Unicode -Force $null = Add-WindowsDriver -Path $MountPath -Driver $InfFile -ForceUnsigned } #================================================= Write-Verbose "[$(Get-Date -format s)] End" #================================================= } |