Ich habe ein Hilfsprogramm geschrieben, um dies von C # aus durchzuführen, bevor PowerShell unterstützt wurde, indem der Puffer zum Senden von Halbbytes der Datei verwendet wurde, die dann auf dem Remote-Computer über WinRM-Aufrufe wieder zusammengefügt wurden. Es ist etwas umständlich und ich habe es nicht über 100 MB getestet, aber es funktioniert wirklich gut. Sie können sich die C # -Datei hier ansehen und könnten die relaventen Teile der PowerShell kopieren und versuchen, dies zu tun ... https://github.com/NaosProject/Naos.WinRM/blob/master/Naos.WinRM/Naos.WinRM.cs
Dateien können in PowerShell nicht mit dem Cmdlet PSSession und Copy-Item ohne einen Methodenaufruffehler kopiert werden
Ich habe ein PowerShell-Skript, das versucht, Dateien von einem alten Computer auf einen neuen zu übertragen. Dies tritt unter Windows 10 mit PowerShell v5 auf. Zu diesem Zweck würde ich es vorziehen, PSSession zum Übertragen von Dateien zu verwenden. Bestimmte Dateien geben jedoch den folgenden Fehler aus:
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
Hier ist der relevante Code, der dies verursacht:
$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
Das Skript wird auf dem neuen PC ausgeführt und empfängt die Dateien von der alten Maschine. Der oben genannte Fehler tritt nur während des Kopiervorgangs auf. Ich dachte, ich hätte die Ursache auf Dateien beschränkt, die aus dem Internet heruntergeladen wurden, und musste "Unblocked" werden, da der gesamte Download-Ordner niemals übertragen wurde.
Ich habe versucht, den folgenden Code vor meinen Copy-Item-Cmdlets hinzuzufügen, und ich bekomme immer noch dieselben Fehler:
Invoke-Command -Session $PSSession -ScriptBlock { # This unblocks all internet downloaded files. Only use on trusted files. Get-ChildItem "c:\users\$UserName\*" -Recurse | Unblock-File }
Jede Einsicht, wie man das umgehen kann, wäre dankbar.
1 Antwort auf die Frage
Verwandte Probleme
-
6
Guter PowerShell-Leitfaden, der durch fortgeschrittene Verwendung Einstieg leistet
-
5
Deaktivieren des Pieptons im cmd-Fenster
-
3
Powershell-Ping auf unbestimmte Zeit
-
5
Tastenkombination zum Einfügen in die Windows-Eingabeaufforderung
-
5
Welche Vorteile könnte ein durchschnittlicher Geek aus Powershell ziehen?
-
1
Powershell: Führt eine Operation für alle Dateien in einem Verzeichnis durch (foreach)
-
1
PowerShell / CMD-Markierung, um in Vista mit der rechten Maustaste zu klicken
-
3
Was ist Windows PowerShell?
-
5
Wie macht man ein Powershell (oder ein anderes) Skript, um die Bildschirmauflösung zu ändern?
-
5
Rufen Sie den aktuellen UNC-Pfad von einem lokalen Pfad in Powershell ab