1
resposta

Erro na função get-filesha1

PS C:\temp> (gci -file).fullname|get-filesha1

Get-Content : Não é possível associar o argumento ao parâmetro 'Path' porque ele é nulo.
No C:\Users\Celio Mendes\Documents\Alura\PowerShell-2\shafile.ps1:9 caractere:36
+         $fileContent = Get-Content $filePath
+                                    ~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-Content], ParentContainsErrorRecordExcepti  
   on
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerSh  
   ell.Commands.GetContentCommand
function Get-FileSHA1($filePath) {

    foreach ($item in $input) {
        
        $ErrorActionPreference="Stop"

        $fileContent = Get-Content $filePath
        $fileBytes = [System.Text.Encoding]::UTF8.GetBytes($fileContent)

        $sha1 = New-Object System.Security.Cryptography.SHA1Managed

        $hash = $sha1.ComputeHash($fileBytes)

        $prettyHashSB = New-Object System.Text.StringBuilder

        foreach ($byte in $hash) {
            $hexaNotation = $byte.ToString("X2")
            $prettyHashSB.Append($hexaNotation) > $null
        }

        $prettyHashSB.ToString()
    }
}
1 resposta

Olá Estudante, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

O erro, "Get-Content : Não é possível associar o argumento ao parâmetro 'Path' porque ele é nulo." está indicando que o comando Get-Content está recebendo um valor nulo, este erro está ocorrendo devido à passagem do conteúdo da variável $filePath para este comando o correto será passar o valor da variável $item que contém o objeto da iteração do laço foreach.

O código ficará da seguinte forma após a correção: $fileContent = Get-Content $item

Código completo com a mudança aplicada

function Get-FileSHA1($filePath) {

    foreach ($item in $input) {
        
        $ErrorActionPreference="Stop"

        $fileContent = Get-Content $item
        $fileBytes = [System.Text.Encoding]::UTF8.GetBytes($fileContent)

        $sha1 = New-Object System.Security.Cryptography.SHA1Managed

        $hash = $sha1.ComputeHash($fileBytes)

        $prettyHashSB = New-Object System.Text.StringBuilder

        foreach ($byte in $hash) {
            $hexaNotation = $byte.ToString("X2")
            $prettyHashSB.Append($hexaNotation) > $null
        }

        $prettyHashSB.ToString()
    }
}

Após realizar a mudança, salve o arquivo com o script. Abra uma nova janela do PowerShell na pasta que contém os arquivos e execute o script usando Dot-Source (colocando um ponto . e o caminho para o script) e logo após basta fazer o uso da função, com o comando (gci -file).fullname|get-filesha1

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!