PowerShell - Arquivos de alteração em lote que codificam para UTF-8

Estou tentando fazer uma coisa simples: alterar arquivos que codificam de qualquer coisa para UTF-8 sem BOM. Eu encontrei vários scripts que fazem isso e o único que realmente funcionou para mim é este:https://superuser.com/questions/397890/convert-text-files-recursively-to-utf-8-in-powershell#answer-397915.

Funcionou como esperado, mas preciso dos arquivos gerados sem BOM. Então, tentei modificar um pouco o script, adicionando a solução dada a esta pergunta:Usando o PowerShell para gravar um arquivo em UTF-8 sem a BOM

Este é o meu script final:

foreach ($i in Get-ChildItem -Recurse) {
    if ($i.PSIsContainer) {
        continue
    }

    $dest = $i.Fullname.Replace($PWD, "some_folder")

    $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)

    if (!(Test-Path $(Split-Path $dest -Parent))) {
        New-Item $(Split-Path $dest -Parent) -type Directory
    }

    get-content $i | out-file -encoding $Utf8NoBomEncoding -filepath $dest
}

O problema é que o PowerShell está me retornando um erro, em relação aoSystem.Text.UTF8Encoding($False) linha, reclamando de um parâmetro incorreto:

Não é possível validar o argumento no parâmetro 'Encoding'. O argumento "System.Text.UTF8Encoding" não pertence ao grupo "unicode, utf7, utf8, utf32, ascii" especificado pelo atributo ValidateSet.

Gostaria de saber se estou perdendo alguma coisa, como versão do PowerShell ou algo assim. Eu nunca codifiquei um script do Powershell antes, então estou totalmente perdido com isso. E preciso alterar a codificação desses arquivos, existem centenas deles, eu não gostaria de fazer isso sozinho, um por um.

Na verdade, estou usando a versão 2.0 que vem com o Windows 7.

Desde já, obrigado!

EDIT 1

Eu tentei o seguinte código, sugerido por @LarsTruijens e outras postagens:

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
foreach ($i in Get-ChildItem -Recurse) {
    if ($i.PSIsContainer) {
        continue
    }

    $dest = $i.Fullname.Replace($PWD, "some_folder")

    if (!(Test-Path $(Split-Path $dest -Parent))) {
        New-Item $(Split-Path $dest -Parent) -type Directory
    }

    $content = get-content $i
    [System.IO.File]::WriteAllLines($dest, $content, $Utf8NoBomEncoding)
}

Isso me dá uma exceção, reclamando de um dos parâmetros para WriteAllLines:"Exception on calling 'WriteAllLines' with 3 arguments. The value can't be null". Parameter name: contents. O script cria todas as pastas, no entanto. Mas eles estão todos vazios.

EDIT 2

Uma coisa interessante sobre esse erro é que o parâmetro "content" não é nulo. Se eu gerar o valor da variável $ content (usando Write-host), as linhas estarão lá. Então, por que ele se torna nulo quando passado para o método WriteAllLines?

EDIT 3

Eu adicionei uma verificação de conteúdo à variável, para que o script agora fique assim:

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
foreach ($i in Get-ChildItem -Recurse) {
    if ($i.PSIsContainer) {
        continue
    }

    $dest = $i.Fullname.Replace($PWD, "some_folder")

    if (!(Test-Path $(Split-Path $dest -Parent))) {
        New-Item $(Split-Path $dest -Parent) -type Directory
    }

    $content = get-content $i

    if ( $content -ne $null ) {

        [System.IO.File]::WriteAllLines($dest, $content, $Utf8NoBomEncoding)
    }
    else {
        Write-Host "No content from: $i"
    }
}

Agora, toda iteração retorna a mensagem "Nenhum conteúdo de: $ i", mas o arquivo não está vazio. Há mais um erro:Get-content: can't find the path 'C:\root\FILENAME.php' because it doesn't exists. Parece que está tentando encontrar os arquivos no diretório raiz e não nas subpastas. Parece ser capaz de obter o nome do arquivo nas pastas filho, mas tenta lê-lo da raiz.

EDIT 4 - Versão final de trabalho

Depois de algumas dificuldades e de seguir os conselhos que recebi aqui, especialmente de @LarsTruijens e @AnsgarWiechers, finalmente consegui. Eu tive que mudar a maneira como estava recebendo o diretório de $ PWD e definir alguns nomes fixos para as pastas. Depois disso, funcionou perfeitamente.

Aqui vai, para qualquer pessoa que possa estar interessada:

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
$source = "path"
$destination = "some_folder"

foreach ($i in Get-ChildItem -Recurse -Force) {
    if ($i.PSIsContainer) {
        continue
    }

    $path = $i.DirectoryName -replace $source, $destination
    $name = $i.Fullname -replace $source, $destination

    if ( !(Test-Path $path) ) {
        New-Item -Path $path -ItemType directory
    }

    $content = get-content $i.Fullname

    if ( $content -ne $null ) {

        [System.IO.File]::WriteAllLines($name, $content, $Utf8NoBomEncoding)
    } else {
        Write-Host "No content from: $i"   
    }
}

questionAnswers(7)

yourAnswerToTheQuestion