function Test-FileEncoding { <# .SYNOPSIS Returns true if the given file is written in a valid encoding .DESCRIPTION Test the given file against the encoding regex and returns true or false .PARAMETER Path Relative or full path to an existing file. .PARAMETER Encoding Optional custom encoding regex string. Default is (utf8|ascii|xml). .INPUTS [none] .OUTPUTS [bool] .EXAMPLE Test-FileEncoding -Path './testfile.txt' .NOTES #> [CmdletBinding()] [Diagnostics.CodeAnalysis.SuppressMessageAttribute( 'PSAvoidUsingInvokeExpression', '', Justification = 'static input without user manipulation' )] [OutputType([bool])] param ( [Parameter(Mandatory = $true)] [ValidateScript( { Test-Path -Path $_ } )] [string]$Path, [Parameter(Mandatory = $false)] [string]$Encoding = '(utf8|utf-8|ascii|xml)' ) begin { } process { try { Get-Command -Name 'file' -ErrorAction 'Stop' | Out-Null } catch { Write-Error -Message "Could not find command called 'file'!" -ErrorAction 'Stop' } $Res = Invoke-Expression -Command ("file '{0}' " -f $Path) # Remove the file from matching. Use the latest array element if split doesn't work. $ParsedResult = ($Res -split ':')[-1] Write-Debug -Message ('Encoding: Raw file output {0}' -f $Res) Write-Debug -Message ('Parsed match string: {0}' -f $ParsedResult) if ($ParsedResult -match $Encoding) { Write-Output $true } else { Write-Output $false } } end { } }