PrivateFunctions/Convert-PSObjectToHashTable.ps1

function Convert-PSObjectToHashTable {
    <#
        .SYNOPSIS
            Converts a PSObject to a hash table.
        .DESCRIPTION
            Converts a System.Management.Automation.PSObject to a System.Collections.Hashtable.
        .PARAMETER InputObject
             Specifies the PSObject to send down the pipeline.
        .EXAMPLE
            Get-Content -Path 'C:\groups.json' -Raw | ConvertFrom-Json | Convert-PSObjectToHashTable
 
            Gets the content from a JSON file, converts it to a PSObject, and finally to a hash table.
        .EXAMPLE
            $psObject = Get-ADUser -Identity $env:USERNAME -Properties * | Select-Object -Property Name, Description, UserPrincipalName
            Convert-PSObjectToHashTable -InputObject $psObject
 
            Converts the resulting PSObject from the Select-Object cmdlet into a hash table.
        .INPUTS
            System.Management.Automation.PSObject
 
                A PSObject is received by the InputObject parameter.
        .OUTPUTS
            System.Collections.Hashtable
        .LINK
            Get-Content
            ConvertFrom-Json
    #>

    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    Param (
        [Parameter(
            Position = 0,
            Mandatory = $true,
            ValueFromPipeline = $true
        )][ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSObject]$InputObject
    )

    PROCESS {
        $hashTable = @{}

        $InputObject.PSObject.Properties | ForEach-Object {
            $hashTable.Add($_.Name, $_.Value)
        }

        Write-Output -InputObject $hashTable
    }
}