none
Einen Ordner auf mehrere Rechner kopieren RRS feed

  • Frage

  • Hallo zusammen,

    ich bin ein PS Neuling und habe mich nun mal aus beruflichen Gründen entschieden, damit mehr zu arbeiten.

    Meine erste "Aufgabe" ist es, einen Ordner der bei uns auf einem Netzlaufwerk (AD Domäne) liegt, auf mehrere Rechner zu kopieren.

    Ich kenne zwar den copy-item Befehl, der lässt mich aber nur immer einen einzigen Rechner "ansteuern" oder? 

    Meine Frage wäre nun, wie ein Batch Datei (gibt es die in der PS überhaupt) aussehen kann, wo ich einen Ordner auf ca. 30 Rechner kopieren kann und diese Batchdatei dann mittels PS ausführe.

    Über Tipps und Hinweise würde ich mich sehr freuen :)

    LG

    Jos


    Donnerstag, 29. August 2019 13:50

Antworten

  • Hi,

    erstmal Batch ist nicht gleich Powershell, beide lassen sich untere einander aufrufen. Im Normalfall gibt es dafür aber keinen Grund, Powershell kann eigentlich alles und viel mehr als Batch.

    In deinem Fall brauchst du das Invoke-Command. Dem kannst du dann hardcoded oder über eine CSV oder XML etc. die Liste an Rechnern übergeben. Damit das möglich ist, muss auf allen Rechnern PS Remoting erlaubt sein, außerdem müssen alle Rechner auf den Netzwerkpfad zugriff haben oder du musst den Ordner über deinen Rechner in die sessions schleusen, dass ist natürlich deutlich langsamer.

    Viel Spaß beim lernen.

    Donnerstag, 29. August 2019 14:01
  •  Invoke-Command ist eher dafür gedacht, wenn Du auf den anderen Servern Aktionen ausführen möchtest.

    Und da geht es dann schon direkt los: Erst mal die Anforderungen klären (ok, Ordner auf Computer kopieren), dann über die möglichen Varianten nachdenken. 3 fallen mir spontan ein:

    1. Skript läuft auf Admin-Rechner und kopiert per C$-Freigabe auf die Computer. Kann man machen, da wären Jobs vielleicht geeignet.

    2. Skript läuft auf Admin-Rechner und kopiert per PSSession "remote" direkt auf den Computern. Oder per psexec oder...

    3. Skript schiebt anderes Skript auf die Computer und führt das dann dort aus, als Task oder remote per Invoke oder...

    Die Liste läßt sich fast beliebig verlängern :-)

    Und _ich persönlich_ würde das als Computerstartskript bauen, das dann auf den jeweiligen Computern läuft und halt beim Boot vordefinierte Aktionen macht - wie "kopiere von xyz nach abc". Und zwar nicht per copy-item (das ist schnarchlangsam), sondern Kopieren _immer_ mit Unterstützung von Robocopy.


    Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq

    Donnerstag, 29. August 2019 16:38

Alle Antworten

  • Hi,

    erstmal Batch ist nicht gleich Powershell, beide lassen sich untere einander aufrufen. Im Normalfall gibt es dafür aber keinen Grund, Powershell kann eigentlich alles und viel mehr als Batch.

    In deinem Fall brauchst du das Invoke-Command. Dem kannst du dann hardcoded oder über eine CSV oder XML etc. die Liste an Rechnern übergeben. Damit das möglich ist, muss auf allen Rechnern PS Remoting erlaubt sein, außerdem müssen alle Rechner auf den Netzwerkpfad zugriff haben oder du musst den Ordner über deinen Rechner in die sessions schleusen, dass ist natürlich deutlich langsamer.

    Viel Spaß beim lernen.

    Donnerstag, 29. August 2019 14:01
  • Hi,

    danke für die Aufklärung und dem Tipp.

    Heißt also ich gehe wie vor?

    Invoke-Command -ComputerName Server01, Server02 -> und dann?

    Sorry bin echt grün hinter den Ohren in dem Bereich :(

    Donnerstag, 29. August 2019 14:12
  • Du solltest Dir dringend die Grundlagen von Powershell draufschaffen. Es ist nicht möglich, Dir hier im Forum das Coden mit Powershell beizubringen.

    Ich gehe davon aus, dass es um eine Domänen-Umgebung geht. Der "Ausführende" des Scriptes sollte also entsprechende Rechte auf allen betroffenen Servern haben.

    Schau Dir mal bitte die Hilfe für das foreach Statement an. In so einer Schleifenkonstruktion kannst Du die Quelle des Copy-Jobs angebeben und dann für jeden einzelnen Server dann das  Ziel.  Invoke-Command ist eher dafür gedacht, wenn Du auf den anderen Servern Aktionen ausführen möchtest.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Donnerstag, 29. August 2019 14:46
    Donnerstag, 29. August 2019 14:46
  • Na fertigen Code werde ich dir nicht liefern und du willst es ja auch lernen. Daher noch folgender tipp.

    Mit get-help cmdlet bekommst du zu dem jeweiligen Befehl eine Hilfe. also get-help invoke-command

    für get-help gibt es dann noch verschiedene Schalter, die man mitgeben kann.

    z.B. get-help invoke-command -full

    Das ist dann alles, was an Erklärung mitgeliefert wird.

    get-help invoke-command -online

    öffnet die Erklärung im Browser und aus der Online DB von MS, dass ist dann auch immer auf dem aktuellsten Stand. die interne Hilfs-DB muss man manuell updaten mit update-help.

    Gruß

    Donnerstag, 29. August 2019 14:51
  •  Invoke-Command ist eher dafür gedacht, wenn Du auf den anderen Servern Aktionen ausführen möchtest.

    Und da geht es dann schon direkt los: Erst mal die Anforderungen klären (ok, Ordner auf Computer kopieren), dann über die möglichen Varianten nachdenken. 3 fallen mir spontan ein:

    1. Skript läuft auf Admin-Rechner und kopiert per C$-Freigabe auf die Computer. Kann man machen, da wären Jobs vielleicht geeignet.

    2. Skript läuft auf Admin-Rechner und kopiert per PSSession "remote" direkt auf den Computern. Oder per psexec oder...

    3. Skript schiebt anderes Skript auf die Computer und führt das dann dort aus, als Task oder remote per Invoke oder...

    Die Liste läßt sich fast beliebig verlängern :-)

    Und _ich persönlich_ würde das als Computerstartskript bauen, das dann auf den jeweiligen Computern läuft und halt beim Boot vordefinierte Aktionen macht - wie "kopiere von xyz nach abc". Und zwar nicht per copy-item (das ist schnarchlangsam), sondern Kopieren _immer_ mit Unterstützung von Robocopy.


    Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq

    Donnerstag, 29. August 2019 16:38
  • Na jetzt bin ich mal gespannt, was am Ende dabei rauskommt.  ;-) :-D

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 29. August 2019 16:54
  •  Invoke-Command ist eher dafür gedacht, wenn Du auf den anderen Servern Aktionen ausführen möchtest.


    So wars auch gedacht. Wenn alle Server/Rechner Zugriff auf die Freigabe haben, einfach jeden Server sich den Ordner selbst auf die Platte kopieren lassen.

    Ein Startskript wäre auch meine Wahl, aber für mich las es sich so, dass er daran PS lernen will und so wollte ich eine Lösung anbieten, die sich nur an PS Mitteln bedient.

    Donnerstag, 29. August 2019 17:44
  • schau dir bei Gelegenheit auch Robocopy an. Selbst im engl. Powershell Forum wird gerne auch von Profis bei komplexen Kopieroperationen auf dieses Tool verwiesen.

    Ist inzwischen fixer Bestandteil vom Betriebssystem.

    kann durchaus sein, dass du damit dein Problem mit einem Einzeiler lösen kannst.


    Freitag, 30. August 2019 14:32