Invoke-Befehl, der meinen PC während Robocopy noch als mittleren Mann verwendet?

410
Christopher Heisler

Kann jemand meinen Code ansehen und mir sagen, warum bei der Verwendung von invoke-command mein PC immer noch als Mittelmann verwendet wird?

Ich versuche, dass der Zielcomputer direkt übertragen wird und dass mein PC nicht als mittlerer Mann verwendet wird.

Invoke-Command -ComputerName $DestinationComputer -Credential $creds -Authentication Credssp -ScriptBlock {  robocopy \\$($args[0])\C$\usmt \\$($args[1])\C$\usmt /E /COPY:DATOU /E /ZB /mt:32 /r:5 /w:0 }-ArgumentList $SourceComputer,$DestinationComputer -ErrorAction Inquire 
0
Huh, sag was? Sie verwenden anscheinend einen Berechtigungsnachweis, so dass sie bei RoboCopy für die Ressourcen für Quelle und Ziel authentifiziert werden. Was ist genau dein Anliegen? Pimp Juice IT vor 6 Jahren 1
Ich möchte direkt von der Quelle zum Ziel übertragen und meinen PC nicht als "Dateihandler" verwenden. Dies geschieht auch dann, wenn alle an denselben Switch angeschlossen sind. Christopher Heisler vor 6 Jahren 0
@ChristopherHeisler Dieser Teil `\\ $ ($ args [0]) \ C $ \ usmt \\ $ ($ args [1]) \ C $ \ usmt` weist Sie darauf hin, dass Dateien zwischen den anderen Computern übertragen werden was du fragst Wenn Sie Ihren Computer von diesem Prozess entfernen möchten, müssen Sie ein solches Skript für die Quelle oder das Ziel ausführen, sofern Sie über die Berechtigung und den Zugriff auf einen dieser Computer verfügen dmb vor 6 Jahren 0
Bedeutet "Invoke-Command -ComputerName $ DestinationComputer" nicht, dass ich den Befehl auf dem Zielcomputer ausführte? Sollte ich vor dem Robocopy versuchen, einen Aufruf-Ausdruck hinzuzufügen? Christopher Heisler vor 6 Jahren 0
Dies ist nur ein kleiner Teil des Skripts. Der auszuführende Prozess ist eine Robocopy, die in die gesamte Maschine eingebaut ist. Ich benutze den invoke-Befehl, um dem Zielcomputer mitzuteilen, dass er eine Robocopy starten soll. Es ist egal, von wo aus dieses Skript ausgeführt wird. Ich bin nicht in einen Fehler geraten. Das Problem ist, dass mein Computer aus irgendeinem dummen Grund immer noch als Mittelsmann für die Übertragung verwendet wird. Wahrscheinlich sollte nur Copy-Item verwendet werden. Christopher Heisler vor 6 Jahren 0

1 Antwort auf die Frage

1
dmb

Ja, Sie führen den Prozess ROBOCOPYauf diesem Computer mit $DestinationComputerJa aus. Sie laufen aber immer noch Invoke-Commandauf Ihrem Rechner, der auf stdoutund wartet stderr.

Aus den Unterlagen

Das Cmdlet Invoke-Command führt Befehle auf einem lokalen oder Remotecomputer aus und gibt alle Ausgaben der Befehle einschließlich Fehlern zurück

Dieses Verhalten wird also mit Ihrem Code erwartet

Invoke-Command -ComputerName $DestinationComputer -Credential $creds -Authentication  Credssp -ScriptBlock {  robocopy \\$($args[0])\C$\usmt \\$($args[1])\C$\usmt /E /COPY:DATOU /E /ZB /mt:32  /r:5 /w:0 }-ArgumentList $SourceComputer,$DestinationComputer -ErrorAction Inquire 

Was Sie brauchen, ist die InDisconnectedSessionOption zu übergeben. Was macht Invoke-Commanddas Herstellen einer Verbindung, führen Sie cmd aus und trennen Sie die Verbindung sofort. Nochmals aus den Dokumenten:

Verwenden Sie zum Erstellen einer getrennten Sitzung den Parameter InDisconnectedSession des Cmdlets Invoke-Command. Es erstellt eine Sitzung, startet den Befehl und trennt sich sofort, bevor der Befehl eine Ausgabe zurückgeben kann.

Das ist es, worum Sie bitten.

Prost.