Public/ConvertTo-HashtableFromJSON.ps1

function ConvertTo-HashtableFromJSON {
  #requires -Version 3.0
  <#
      .SYNOPSIS
      Retrievies json file from disk and converts to hashtable.

      .DESCRIPTION
      Reads file given as Path parameter and using ConvertTo-HashtableFromPsCustomObject converts it to a hashtable.

      .PARAMETER Path
      Path to a json file.

      .EXAMPLE
      ConvertTo-HashtableFromJSON -Path c:\AdminTools\somefile.json
      Will read somefile.json and convert it to custom hashtable.

      .INPUTS
      Path to a json file (string).

      .OUTPUTS
      Custom Hashtable.
  #>




    [CmdletBinding()]
    [OutputType([Hashtable])]
    param ( 
         [Parameter(  
             Position = 0,HelpMessage='Path to json file', 
             Mandatory = $true,   
             ValueFromPipeline = $true,  
             ValueFromPipelineByPropertyName = $true)]
         [ValidateScript({Test-Path -Path $_ -PathType 'Leaf' })]
         
         [string]
         $Path 
     ) 
  Begin {
    Write-Verbose -Message "Starting $($MyInvocation.MyCommand) " 
    Write-Verbose -Message 'Execution Metadata:'
    Write-Verbose -Message "User = $($env:userdomain)\$($env:USERNAME)" 
    Write-Verbose -Message "Computername = $env:COMPUTERNAME" 
    Write-Verbose -Message "Host = $($host.Name)"
    Write-Verbose -Message "PSVersion = $($PSVersionTable.PSVersion)"
    Write-Verbose -Message "Runtime = $(Get-Date)" 

    Write-Verbose -Message "[$((get-date).TimeOfDay.ToString()) BEGIN ] Starting: $($MyInvocation.Mycommand)"
    
  }
  Process{
    Write-Verbose -Message "[$((get-date).TimeOfDay.ToString()) PROCESS ] Processing json file {$Path}"
    $content = Get-Content -LiteralPath $path -ReadCount 0 -Raw | Out-String
    Write-Verbose -Message "[$((get-date).TimeOfDay.ToString()) PROCESS ] File read. Converting to PSCustomObject"
    $pscustomObject = ConvertFrom-Json -InputObject $content
    Write-Verbose -Message "[$((get-date).TimeOfDay.ToString()) PROCESS ] Converting from PSCustomObject to HashTable"
    $hashtable = ConvertTo-HashtableFromPsCustomObject -psCustomObject $pscustomObject
    $hashtable
  }
  End {
    Write-Verbose -Message "[$((get-date).TimeOfDay.ToString()) END ] Ending: $($MyInvocation.Mycommand)"
    Write-Verbose -Message "Ending $($MyInvocation.MyCommand) " 
  }
}