Private/Status/Get-PendingRebootStateInternal.ps1

#Requires -Version 5.1

function Get-PendingRebootStateInternal {
    [CmdletBinding()]
    param()

    $pending = [ordered]@{}

    $pending.CBSRebootPending = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
    $pending.WURebootRequired = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'

    $pfr = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' -Name PendingFileRenameOperations -ErrorAction SilentlyContinue).PendingFileRenameOperations
    $pending.PendingFileRenameOperationsCount = if ($pfr) { @($pfr).Count } else { 0 }

    $cn = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName' -Name ComputerName -ErrorAction SilentlyContinue).ComputerName
    $acn = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName' -Name ComputerName -ErrorAction SilentlyContinue).ComputerName
    $pending.PendingComputerRename = ($cn -and $acn -and ($cn -ne $acn))

    $pending.IsRebootPending = [bool](
        $pending.CBSRebootPending -or
        $pending.WURebootRequired -or
        $pending.PendingComputerRename -or
        ($pending.PendingFileRenameOperationsCount -gt 0)
    )

    return [pscustomobject]$pending
}