none
PS Remoting: Copy Files RRS feed

  • Frage

  • Hallo,

    ich möchte per Powershell Remoting Files kopieren kopieren.

    Mir steht nur der Standard WinRM Port zur Verfügung, so dass SMB, WMI, SSH etc. nicht funktioniert.

    Kennt jemand einen Trick bzw. ein Modul mit dem dies mit Remote Session möglich ist? 

    PS: PowerShell 3.0 bietet leider IMHO diesbezüglich auch nichts :-(

    Gruss Olaf

    Dienstag, 24. Juli 2012 09:22

Antworten

  • Du kannst eine Datei (auch eine binäre) mit Get-Content einlesen und diese dann wieder mit Set-Content herausschreiben ;-))
    Die Datei muss dabei natürlich in den Speicher passen!

    get-help > c:\temp\help.txt
    # ganze Textdatei einlesen (-ReadCount 0) und wieder abspeichern
    Get-Content c:\temp\help.txt -ReadCount 0 | Set-Content c:\temp\help2.txt
    
    
    # Get-Content und Set-Content unterstützen den Parameter -Encoding wenn dieser
    # auf Byte gesetzt wird, kann man Binäre Dateien einlesen und speichern ohne
    # das diese geändert werden.
    # ganze binärdatei einlesen (-ReadCount 0) und wieder abspeichern mit Set-Content und -encoding byte
    Get-Content -Encoding Byte c:\temp\Bild.bmp -ReadCount 0 | Set-Content -Encoding byte c:\temp\Bild2.bmp
    Um das ganze Remote durchzuführen nutzt du natürlich Invoke-Command -Scriptblock -Computername dazu !
    Das ganze ist etwas langsam aber es geht!
    Mit Invoke-Command und dem Parameter kannst du -Scriptblock müsstes du auch .NET Klassen nutzen können (probieren).

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '




    Dienstag, 24. Juli 2012 10:54

Alle Antworten

  • Du kannst eine Datei (auch eine binäre) mit Get-Content einlesen und diese dann wieder mit Set-Content herausschreiben ;-))
    Die Datei muss dabei natürlich in den Speicher passen!

    get-help > c:\temp\help.txt
    # ganze Textdatei einlesen (-ReadCount 0) und wieder abspeichern
    Get-Content c:\temp\help.txt -ReadCount 0 | Set-Content c:\temp\help2.txt
    
    
    # Get-Content und Set-Content unterstützen den Parameter -Encoding wenn dieser
    # auf Byte gesetzt wird, kann man Binäre Dateien einlesen und speichern ohne
    # das diese geändert werden.
    # ganze binärdatei einlesen (-ReadCount 0) und wieder abspeichern mit Set-Content und -encoding byte
    Get-Content -Encoding Byte c:\temp\Bild.bmp -ReadCount 0 | Set-Content -Encoding byte c:\temp\Bild2.bmp
    Um das ganze Remote durchzuführen nutzt du natürlich Invoke-Command -Scriptblock -Computername dazu !
    Das ganze ist etwas langsam aber es geht!
    Mit Invoke-Command und dem Parameter kannst du -Scriptblock müsstes du auch .NET Klassen nutzen können (probieren).

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '




    Dienstag, 24. Juli 2012 10:54
  • Hallo Peter,

    Habe mal testweise mit Deinem Ansatz damit einen Ordner mit ca. 10MB (68 Dateien, 11Ordner) kopiert.

    Funktioniert soweit. Habe allerdings nach ca. 10min abgebrochen, da die Performance grottenschlecht ist.

    Man könnte sicherlich vorher noch zippen, ist aber auch nicht optimal.

    Ist also so nicht zu gebrauchen und ich werde mich wohl um eine andere Lösung bemühen müssen.

    Aber danke trotzdem!

    Gruss Olaf


    Dienstag, 24. Juli 2012 12:59
  • Du musst immer bedenken das WinRM über HTTP arbeitet!
    Das heisst, das Intern immer nur Text verarbeitet wird (die Bytes werden als Buchstaben transportiert!).
    Ich kenne sonnst nichts schnelleres über WinRM!

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Dienstag, 24. Juli 2012 13:11