none
Output von Robocopy aus Remote-Session ausgeben lassen RRS feed

  • Frage

  • Hallo zusammen,

    in meinem Powershell Script führe ich ein einen Robocopy-Befehl Remote auf einem Zielserver aus. Leider gibt der Robocopy-Befehl keinen Output in der Powershell zurück, wenn ich den Parameter /Log benutze. Nutze ich den Parameter /Log nicht, kommt der Output auf dem scriptausführenden Server an. Interessanterweise bringt mich der Parameter /tee nicht weiter. Auch bei der Angabe dieses Parameters gibt es keine Rückgabe eines Outputs. Wie kann ich Robocopy ein Log schreiben und gleichzeitig einen Output im der Shell ausgeben lassen? 

    Danke bereits im Voraus für die Rückmeldung.

    function InvokeCommandOldServer () {
        Write-Host "Verbinde mit $ServerOld"
        $Logdatei = Invoke-Command -ComputerName $ServerOld -Credential $Credential -Authentication Credssp -ScriptBlock {
            Write-Host "Verbindung hergestellt"
            $Sharename1 = $args[0]
            $Username= $args[1].name
            $NeuerServer= $args[2]
            $NeuerShare = $args[3]
            $Logdatei = "/log:C:\Log.txt" 
            Write-Host "Variablen übernommen. Notiere Shares"
            $Folderpath=(Get-WmiObject -Class Win32_Share | Select-Object -Property * | Where-Object {$_.Name -eq $Sharename1}).Path
            $Userpath=(Get-Childitem -Path $Folderpath -Filter {*} | Where-Object {$_.Name -eq $Username}).fullname    
            # Schließe aus, dass Userpath leer ist 
            if ($Userpath -ne $null) {
                Write-Host "Shares notiert. Starte Robocopy - ACHTUNG dies kann etwas dauern!"
                $NeuerServer="\\$NeuerServer\$NeuerShare\$Username"
                $cmd = 'c:\windows\system32\robocopy.exe'
                $Arguments = $Userpath,$NeuerServer,'/MIR','/COPYALL','/SEC','/W:3','/R:3','/tee',$Logdatei
                & $cmd $Arguments
                }   
            else {
                Write-Host "Kann Verzeichnis auf Server nicht finden. Bitte prüfen!"
                }
            $Content = get-content -Path "C:\Log.txt"
            return $Content
    
        } -ArgumentList ($Sharename1,$User,$ServerNew,$Sharename2)
    
        return $Logdatei
    }


    • Bearbeitet Canpo Montag, 29. Februar 2016 10:00
    Montag, 29. Februar 2016 09:46

Antworten

  • Hallo Teodora,

    vielen Dank für Ihre Antwort. Leider klappt dies nicht so wie gewünscht. Ich habe allerdings für andere User in Zukunft einen (etwas dreckigenn..) Workaround gefunden:

    $all = "robocopy $Userpath $Targetpath /MIR /COPYALL /SEC /W:3 /R:3 /NP /tee $Logdatei 2>&1"
    Invoke-Expression -Command $all | % { Write-Host $_ }

    Mittwoch, 2. März 2016 12:33

Alle Antworten

  • Hallo Canpo,

    versuchen Sie mit: 

    $Logdatei = /log:"C:\Log.txt"

    oder so

         $Logdatei = /log:C:\Log.txt

    Gruß,

    Teodora


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort vorgeschlagen tpianto Montag, 14. März 2016 10:12
    Dienstag, 1. März 2016 08:00
    Moderator
  • Hallo Teodora,

    vielen Dank für Ihre Antwort. Leider klappt dies nicht so wie gewünscht. Ich habe allerdings für andere User in Zukunft einen (etwas dreckigenn..) Workaround gefunden:

    $all = "robocopy $Userpath $Targetpath /MIR /COPYALL /SEC /W:3 /R:3 /NP /tee $Logdatei 2>&1"
    Invoke-Expression -Command $all | % { Write-Host $_ }

    Mittwoch, 2. März 2016 12:33