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"
    #=================================================
}