Não é possível copiar arquivos no PowerShell usando o cmdlet PSSession e Copy-Item sem um erro de invocação do método

2

Eu tenho um script do PowerShell que tenta transferir arquivos de uma máquina antiga para uma nova. Isso está ocorrendo no Windows 10 com o PowerShell v5. Para esse propósito, prefiro usar o PSSession para transferir arquivos. No entanto, alguns arquivos apresentam o erro abaixo:

Copy-Item : Method invocation failed because [System.IO.MemoryStream] does not contain a method named 'new'.
At C:\Users\username\Desktop\Import-ComputerData.ps1:153 char:13
+             Copy-Item -Path "C:\users\$UserName\Desktop" -Destination ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], RuntimeException
    + FullyQualifiedErrorId : System.Management.Automation.RuntimeException,WriteException

Aqui está o código relevante que está causando isso:

    $PSSession = New-PSSession -Computername $ComputerName -ErrorAction SilentlyContinue -ErrorVariable PSSessionError
    ...
    Copy-Item -Path "C:\users\$UserName\Desktop" -Destination "C:\users\$UserName\" -Recurse -FromSession $PSSession -PassThru -Force
    Copy-Item -Path "C:\users\$UserName\Documents" -Destination "C:\users\$UserName\" -Recurse -FromSession $PSSession -PassThru -Force
    Copy-Item -Path "C:\users\$UserName\Favorites" -Destination "C:\users\$UserName\" -Recurse -FromSession $PSSession -PassThru -Force
    Copy-Item -Path "C:\users\$UserName\Pictures" -Destination "C:\users\$UserName\" -Recurse -FromSession $PSSession -PassThru -Force
    Copy-Item -Path "C:\users\$UserName\Downloads" -Destination "C:\users\$UserName\Downloads\Old Downloads" -Recurse -FromSession $PSSession -PassThru -Force
    ...
    Remove-PSSession $PSSession        

O script é executado no novo PC que recebe os arquivos da máquina antiga. O erro mencionado acima só acontece durante o processo de cópia. Eu achava que a causa estava restrita a arquivos baixados da Internet e que precisavam ser "Desbloqueados", já que a pasta Downloads inteira nunca foi transferida.

Eu tentei adicionar o seguinte código antes dos cmdlets do Copy-Item e ainda recebo os mesmos erros:

        Invoke-Command -Session $PSSession -ScriptBlock {
            # This unblocks all internet downloaded files. Only use on trusted files.
            Get-ChildItem "c:\users\$UserName\*" -Recurse | Unblock-File 
        }

Qualquer insight sobre como contornar isso seria apreciado.

    
por cyborgcommando0 07.09.2017 / 01:49

1 resposta

0

Eu escrevi um utilitário para executar isso a partir de C # antes que o PowerShell tivesse suporte usando o buffer para enviar nibbles do arquivo, em seguida, remontando na máquina remota por meio de chamadas do WinRM. É um pouco tortuoso e não testei mais de 100MB, mas funciona muito bem. Você pode olhar para o arquivo C # aqui e pode copiar as partes relevantes do PowerShell e tentar isso ...

    
por 30.03.2018 / 19:47