#Requires -Modules 'dism'
Param(
    [Parameter(Mandatory)]
    [string]$ImageName,
    [Parameter(Mandatory)]
    [string]$SourceFolder,
    [Parameter(Mandatory)]
    [string]$DestinationFile
)

$StartJobSplat = @{
    ArgumentList = $ImageName, $SourceFolder, $DestinationFile
    ScriptBlock  = {
        Param(
            $ImageName,
            $SourceFolder,
            $DestinationFile
        )

        $NewWindowsImageSplat = @{
            Name        = $ImageName
            CapturePath = $SourceFolder
            ImagePath   = $DestinationFile
            Verify      = $True
        }
        New-WindowsImage @NewWindowsImageSplat
        }
}
$Job = Start-Job @StartJobSplat

While ($Job.State -eq 'Running') {
    $GetItemSplat = @{
        Path        = $DestinationFile
        ErrorAction = 'SilentlyContinue'
    }
    $OutputFile = Get-Item @GetItemSplat
    If ($OutputFile) {
        Write-Host "Export in progress ... $($OutputFile.FullName); Size: $('{0:n2}' -f ($OutputFile.Length / 1MB))MB"
    }
    Else {
        Write-Host "Export initiating ... "
    }

    $StartSleepSplat = @{
        Seconds = 30
    }
    Start-Sleep @StartSleepSplat
}

Receive-Job $Job
Remove-Job $Job