J'ai un script PowerShell qui tente de transférer des fichiers d'une ancienne machine vers une nouvelle. Cela se produit sous Windows 10 avec PowerShell v5. Pour cela, je préférerais utiliser PSSession pour transférer des fichiers. Cependant, certains fichiers génèrent l'erreur suivante :
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
Voici le code qui en est à l'origine :
$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
Le script est exécuté sur le nouveau PC qui reçoit les fichiers de l'ancienne machine. L'erreur susmentionnée ne se produit que pendant le processus de copie. Je pensais avoir réduit la cause à des fichiers téléchargés à partir d'Internet et devant être "débloqués" car l'ensemble du dossier Téléchargements n'a jamais été transféré.
J'ai essayé d'ajouter le code suivant avant mes cmdlets Copy-Item et j'obtiens toujours les mêmes erreurs :
Invoke-Command -Session $PSSession -ScriptBlock {
# This unblocks all internet downloaded files. Only use on trusted files.
Get-ChildItem "c:\users\$UserName\*" -Recurse | Unblock-File
}
Toute idée sur la façon de contourner ce problème serait appréciée.