private/_GetOSInfo.ps1

function _GetOSInfo {
    [cmdletbinding()]
    Param(
        [Microsoft.Management.Infrastructure.CimSession]$Cimsession
    )
    Write-Verbose "[$($CimSession.ComputerName)] - Gathering OS information"
    $TimeZone = Get-CimInstance -CimSession $CimSession -ClassName Win32_TimeZone -Property Caption -ErrorAction Stop
    $OS = Get-CimInstance -CimSession $CimSession -ClassName Win32_OperatingSystem -Property Caption, Version, ServicePackMajorVersion, ServicePackMinorVersion, LastBootUpTime, OSArchitecture, InstallDate
    $ProductKey = (Get-CimInstance -CimSession $CimSession -Query 'SELECT OA3xOriginalProductKey FROM SoftwareLicensingService' -ErrorAction SilentlyContinue).OA3xOriginalProductKey
    $PageFile = Get-CimInstance -CimSession $CimSession -ClassName Win32_PageFile -Property Name, FileSize
    [PSCustomObject]@{
        PSTypename     = 'PSP.Inventory.OperatingSystemInfo'
        ComputerName   = $Cimsession.ComputerName
        Caption        = $OS.Caption
        Version        = $OS.Version
        ServicePack    = ("{0}.{1}" -f $OS.ServicePackMajorVersion, $OS.ServicePackMinorVersion)
        ProductKey     = $ProductKey
        LastReboot     = $OS.LastBootUpTime
        InstallDate    = $OS.InstallDate
        OSArchitecture = $OS.OSArchitecture
        TimeZone       = $TimeZone.Caption
        PageFile       = if ($PageFile) {foreach ($File in $PageFile) {$File.Name}}else {$null}
        PageFileSizeGB = if ($PageFile) {foreach ($File in $PageFile) {([math]::round(($File.FileSize / 1GB), 0))}} else {$null}
        InventoryDate  = (Get-Date)
    }
}