Public/OOBE/OSD.OOBE.ps1

if ($env:UserName -eq 'defaultuser0') {
    function Invoke-oobeAddNetFX3 {
        [CmdletBinding()]
        param ()
        #================================================
        # Initialize
        #================================================
        $Title = 'Invoke-oobeAddNetFX3'
        $host.ui.RawUI.WindowTitle = "Running $Title"
        $host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.size(2000,2000)
        #================================================
        # Temp
        #================================================
        if (!(Test-Path "$env:SystemRoot\Temp")) {
            New-Item -Path "$env:SystemRoot\Temp" -ItemType Directory -Force
        }
        #================================================
        # Transcript
        #================================================
        $Transcript = "$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$Title.log"
        Start-Transcript -Path (Join-Path "$env:SystemRoot\Temp" $Transcript) -ErrorAction Ignore
        $host.ui.RawUI.WindowTitle = "Running $Title $env:SystemRoot\Temp\$Transcript"
        #================================================
        # Main
        #================================================
        if ($env:UserName -eq 'defaultuser0') {
            $AddWindowsCapability = Get-MyWindowsCapability -Match 'NetFX' -Detail
            foreach ($Item in $AddWindowsCapability) {
                if ($Item.State -ne 'Install') {
                    Write-Host -ForegroundColor DarkCyan "$($Item.DisplayName)"
                    $Item | Add-WindowsCapability -Online -ErrorAction Ignore | Out-Null
                }
                else {
                    Write-Host -ForegroundColor DarkGray "$($Item.DisplayName)"
                }
            }
        }
        else {
            Write-Warning "OOBE defaultuser0 is required to run $Title"
            Start-Sleep -Seconds 5
        }
        #================================================
        # Complete
        #================================================
        if ($Global:OOBEDeployWindowTitle) {
            $host.ui.RawUI.WindowTitle = $Global:OOBEDeployWindowTitle
        }
        else {
            $host.ui.RawUI.WindowTitle = "$Title $env:SystemRoot\Temp\$Transcript"
        }
        Stop-Transcript
        #================================================
    }
    function Invoke-oobeAddRSAT {
        [CmdletBinding()]
        param ()
        #================================================
        # Initialize
        #================================================
        $Title = 'Invoke-oobeAddRSAT'
        $host.ui.RawUI.WindowTitle = "Running $Title"
        $host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.size(2000,2000)
        #================================================
        # Temp
        #================================================
        if (!(Test-Path "$env:SystemRoot\Temp")) {
            New-Item -Path "$env:SystemRoot\Temp" -ItemType Directory -Force
        }
        #================================================
        # Transcript
        #================================================
        $Transcript = "$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$Title.log"
        Start-Transcript -Path (Join-Path "$env:SystemRoot\Temp" $Transcript) -ErrorAction Ignore
        $host.ui.RawUI.WindowTitle = "Running $Title $env:SystemRoot\Temp\$Transcript"
        #================================================
        # Main
        #================================================
        if ($env:UserName -eq 'defaultuser0') {
            $AddWindowsCapability = Get-MyWindowsCapability -Category Rsat -Detail
            foreach ($Item in $AddWindowsCapability) {
                if ($Item.State -ne 'Installed') {
                    Write-Host -ForegroundColor DarkCyan "$($Item.DisplayName)"
                    $Item | Add-WindowsCapability -Online -ErrorAction Ignore | Out-Null
                }
                else {
                    Write-Host -ForegroundColor DarkGray "$($Item.DisplayName)"
                }
            }
        }
        else {
            Write-Warning "OOBE defaultuser0 is required to run $Title"
            Start-Sleep -Seconds 5
        }
        #================================================
        # Complete
        #================================================
        if ($Global:OOBEDeployWindowTitle) {
            $host.ui.RawUI.WindowTitle = $Global:OOBEDeployWindowTitle
        }
        else {
            $host.ui.RawUI.WindowTitle = "$Title $env:SystemRoot\Temp\$Transcript"
        }
        Stop-Transcript
        #================================================
    }
    function Invoke-oobeRemoveAppx {
        [CmdletBinding()]
        param (
            [string[]]$RemoveAppx
        )
        #================================================
        # Initialize
        #================================================
        $Title = 'Invoke-oobeRemoveAppx'
        $host.ui.RawUI.WindowTitle = "Running $Title"
        $host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.size(2000,2000)
        #================================================
        # Temp
        #================================================
        if (!(Test-Path "$env:SystemRoot\Temp")) {
            New-Item -Path "$env:SystemRoot\Temp" -ItemType Directory -Force
        }
        #================================================
        # Transcript
        #================================================
        $Transcript = "$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$Title.log"
        Start-Transcript -Path (Join-Path "$env:SystemRoot\Temp" $Transcript) -ErrorAction Ignore
        $host.ui.RawUI.WindowTitle = "Running $Title $env:SystemRoot\Temp\$Transcript"
        #================================================
        # Main
        #================================================
        if ($env:UserName -eq 'defaultuser0') {
            foreach ($Item in $RemoveAppx) {
                Remove-AppxOnline -Name $Item
            }
        }
        else {
            Write-Warning "OOBE defaultuser0 is required to run $Title"
            Start-Sleep -Seconds 5
        }
    
        #================================================
        # Complete
        #================================================
        if ($Global:OOBEDeployWindowTitle) {
            $host.ui.RawUI.WindowTitle = $Global:OOBEDeployWindowTitle
        }
        else {
            $host.ui.RawUI.WindowTitle = "$Title $env:SystemRoot\Temp\$Transcript"
        }
        Stop-Transcript
        #================================================
    }
    function Invoke-oobeUpdateDrivers {
        [CmdletBinding()]
        param ()
        #================================================
        # Initialize
        #================================================
        $Title = 'Invoke-oobeUpdateDrivers'
        $host.ui.RawUI.WindowTitle = "Running $Title"
        $host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.size(2000,2000)
        #================================================
        # Temp
        #================================================
        if (!(Test-Path "$env:SystemRoot\Temp")) {
            New-Item -Path "$env:SystemRoot\Temp" -ItemType Directory -Force
        }
        #================================================
        # Transcript
        #================================================
        $Transcript = "$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$Title.log"
        Start-Transcript -Path (Join-Path "$env:SystemRoot\Temp" $Transcript) -ErrorAction Ignore
        $host.ui.RawUI.WindowTitle = "Running $Title $env:SystemRoot\Temp\$Transcript"
        #================================================
        # Main
        #================================================
        if ($env:UserName -eq 'defaultuser0') {
            if (!(Get-Module PSWindowsUpdate -ListAvailable -ErrorAction Ignore)) {
                try {
                    Install-Module PSWindowsUpdate -Force
                    Import-Module PSWindowsUpdate -Force
                }
                catch {
                    Write-Warning 'Unable to install PSWindowsUpdate Driver Updates'
                }
            }
            if (Get-Module PSWindowsUpdate -ListAvailable -ErrorAction Ignore) {
                Install-WindowsUpdate -UpdateType Driver -AcceptAll -IgnoreReboot
            }
        }
        else {
            Write-Warning "OOBE defaultuser0 is required to run $Title"
            Start-Sleep -Seconds 5
        }
    
        #================================================
        # Complete
        #================================================
        if ($Global:OOBEDeployWindowTitle) {
            $host.ui.RawUI.WindowTitle = $Global:OOBEDeployWindowTitle
        }
        else {
            $host.ui.RawUI.WindowTitle = "$Title $env:SystemRoot\Temp\$Transcript"
        }
        Stop-Transcript
        #================================================
    }
    function Invoke-oobeUpdateWindows {
        [CmdletBinding()]
        param ()
        #================================================
        # Initialize
        #================================================
        $Title = 'Invoke-oobeUpdateWindows'
        $host.ui.RawUI.WindowTitle = "Running $Title"
        $host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.size(2000,2000)
        #================================================
        # Temp
        #================================================
        if (!(Test-Path "$env:SystemRoot\Temp")) {
            New-Item -Path "$env:SystemRoot\Temp" -ItemType Directory -Force
        }
        #================================================
        # Transcript
        #================================================
        $Transcript = "$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-$Title.log"
        Start-Transcript -Path (Join-Path "$env:SystemRoot\Temp" $Transcript) -ErrorAction Ignore
        $host.ui.RawUI.WindowTitle = "Running $Title $env:SystemRoot\Temp\$Transcript"
        #================================================
        # Main
        #================================================
        if ($env:UserName -eq 'defaultuser0') {
            if (!(Get-Module PSWindowsUpdate -ListAvailable)) {
                try {
                    Install-Module PSWindowsUpdate -Force
                    Import-Module PSWindowsUpdate -Force
                }
                catch {
                    Write-Warning 'Unable to install PSWindowsUpdate Windows Updates'
                }
            }
            if (Get-Module PSWindowsUpdate -ListAvailable -ErrorAction Ignore) {
                Write-Host -ForegroundColor DarkCyan 'Add-WUServiceManager -MicrosoftUpdate -Confirm:$false'
                Add-WUServiceManager -MicrosoftUpdate -Confirm:$false
                #Write-Host -ForegroundColor DarkCyan 'Install-WindowsUpdate -UpdateType Software -AcceptAll -IgnoreReboot'
                #Install-WindowsUpdate -UpdateType Software -AcceptAll -IgnoreReboot -NotTitle 'Malicious'
                Write-Host -ForegroundColor DarkCyan 'Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -IgnoreReboot'
                Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -IgnoreReboot -NotTitle 'Preview' -NotKBArticleID 'KB890830','KB5005463','KB4481252'
            }
        }
        else {
            Write-Warning "OOBE defaultuser0 is required to run $Title"
            Start-Sleep -Seconds 5
        }
        #================================================
        # Complete
        #================================================
        if ($Global:OOBEDeployWindowTitle) {
            $host.ui.RawUI.WindowTitle = $Global:OOBEDeployWindowTitle
        }
        else {
            $host.ui.RawUI.WindowTitle = "$Title $env:SystemRoot\Temp\$Transcript"
        }
        Stop-Transcript
        #================================================
    }    
}