ConvertTo-HexString.ps1

Set-StrictMode -Version Latest

<#
.SYNOPSIS
   Convert to Hex String
.DESCRIPTION
    
.EXAMPLE
    
.INPUTS
    
.NOTES
    
#>

function ConvertTo-HexString {
    [CmdletBinding()]
    param (
        # Value to convert
        [Parameter(Mandatory=$true, Position = 0, ValueFromPipeline=$true)]
        [object] $InputObject,
        # Delimiter between Hex pairs
        [Parameter (Mandatory=$false)]
        [string] $Delimiter = " ",
        # Encoding to use for text strings
        [Parameter (Mandatory=$false)]
        [ValidateSet("Ascii", "UTF32", "UTF7", "UTF8", "BigEndianUnicode", "Unicode")]
        [string] $Encoding = "Default"       
    )

    process 
    {
        [byte[]] $inputBytes = $null
        if(($InputObject -is [Byte[]]) -or $InputObject -is [Byte])
        {
            $inputBytes = $InputObject
        }
        elseif($InputObject -is [guid])
        {
            $inputBytes = $InputObject.ToByteArray()
        }
        elseif($InputObject -is [string])
        {
            $inputBytes = [Text.Encoding]::$Encoding.GetBytes($InputObject)
        }
        elseif($InputObject -is [System.IO.FileSystemInfo])
        {
            $inputBytes = [Text.Encoding]::$Encoding.GetBytes((Get-Content $InputObject.FullName -Raw -Encoding $Encoding))
        }
        else
        {
            # Otherwise, write a non-terminating error message indicating that input object type is not supported.
            $errorMessage = "Cannot convert input of type {0} to Hex string." -f $InputObject.GetType()
            Write-Error -Message $errorMessage -Category ([System.Management.Automation.ErrorCategory]::ParserError) -ErrorId "ConvertHexFailureTypeNotSupported"
        }

        if ($inputBytes) {
            [string[]] $outHexString = New-Object string[] $inputBytes.Count
            for ($iByte = 0; $iByte -lt $inputBytes.Count; $iByte++) {
                $outHexString[$iByte] = $inputBytes[$iByte].ToString("X2")
            }
            return $outHexString -join $Delimiter
            #return [System.BitConverter]::ToString($inputBytes)
        }
    }
}