Sie sollten nicht auf alle Ihre Dateiübertragungen aufpassen müssen wie auf kleine Kinder; mit geplanten Tasks können Sie diese Arbeit automatisieren.
Dateien von einem Ort zum anderen zu kopieren ist eine banale Aufgabe, ganz egal wie Sie es machen. Und man kann es auf viele verschiedene Arten machen: Ziehen und ablegen im Windows Explorer, Copy-Item mit PowerShell oder ein einfacher copy Befehl in DOS. Man muss nur eine Quelle und einen Zielpfad eingeben und bedarfsweise einige andere Parameter setzen. Erst wenn Sie häufig viele Dateien kopieren müssen, kommen Probleme auf.
Wenn Sie das Kopieren von Dateien automatisieren wollen, besonders in einer Windows-Umgebung, ist Windows PowerShell die ideale Skriptsprache. Wenn Sie schnell eine oder mehrere Dateien von einem Ort zum anderen kopieren müssen, bietet PowerShell sich dafür an. Sie können nicht nur manuell PowerShell-Skripte starten, sondern auch einfach Übertragungen via PowerShell-Skripte durch geplante Tasks in Windows anstoßen.
In diesem Artikel zeige ich, wie man mit einem Skript in PowerShell Datei-Transfers veranlassen kann und einen geplanten Task erstellen kann, der das Skript periodisch wiederkehrend ausführt. Die folgenden Tricks funktionieren nur mit PowerShell v4 und höher.
Related Article: Developing an HTTP Script Monitor in PowerShell
Erstellung des Skripts
Zuerst müssen Sie ein Skript erstellen, dass die Datei-Transfers ausführt. Wir werden es CopyFiles.ps1 nennen. Das Skript sieht so aus:
param(
[string]$SourcePath,
[string]$DestinationPath
)
Copy-Item –Path $SourcePath –Destination $DestinationPath -Recurse
Das Skript ist einfach, aber es läßt genügend Platz für individuelle Anpassungen an Ihre Umgebung.
Der komplizierteste Teil in dem Skript ist der param() Abschnitt. Dies ist ein Parameterblock, der zwei Parameter enthält: SourcePath und DestinationPath. Dadurch, dass diese beiden Werte sind, kann man verschiedene Werte in das Skript geben und es so weiterbenutzen. Wenn SourcePath and DestinationPath tatsächliche Pfade wären, müsste man für jede Dateikopierung eigene Skripte erstellen.
Wenn man das Skript manuell ausführt, sieht das ungefähr so aus:
& .\CopyFiles.ps1 –SourcePath C:\Source –DestinationPath \\SERVER\Destination
In diesem Beispiel werden all Dateien und Unterordner aus dem Ordner C:\Source zu dem freigegebenen Ordner \\SERVER\Destination kopiert.
Erstellung des geplanten Tasks
Nachdem Sie nun Ihr CopyFiles.ps1 PowerShell-Skript erstellt haben, gehen Sie zu dem Computer, von dem aus Sie es ausführen wollen. In diesem Beispiel werden wir einen geplanten Task erstellen, der dieses Skript täglich um 3 Uhr morgens ausführt.
Sie könnten den geplanten Task über die Task-Scheduler-Oberfläche erstellen, aber hier geht ja alles um Automation. Ich werde also zeigen, wie man den geplanten Task in PowerShell erstellt. Dafür müssen Sie vier grobe Schritte ausführen:
Die geplante Task-Aktion erstellen
Den Auslöser erstellen
Den geplanten Task im Speicher erstellen
Den geplanten Task auf dem Computer erstellen
So sieht das nun in der Praxis aus: Zuerst erstellt man die geplante Task-Aktion. Diese bestimmt, dass die EXE zusammen mit möglichen Argumenten läuft. In dem Beispiel gehe ich davon aus, dass Ihr Skript sich unter C:\CopyFiles.ps1 befindet.
$Action = New-ScheduledTaskAction -Execute
'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' -Argument "-NonInteractive -NoLogo
-NoProfile -File 'C:\CopyFiles.ps1' –SourcePath 'C:\Source –DestinationPath '\\SERVER\Destination'"
Als nächstes wird ein Auslöser erstellt, der das Skript täglich um 3 Uhr morgens laufen lässt.
$Trigger = New-ScheduledTaskTrigger -Daily -At '3AM'
Dann wird der geplante Task unter Benutzung der Aktion und des Auslösers, die wir gerade kreiert haben, im Speicher erstellt.
$Task = New-ScheduledTask -Action $Action -Trigger $Trigger -Settings (New-ScheduledTaskSettingsSet)
Zum Schluss erstelle ich den geplanten Task auf dem System - nenne ihn File Transfer Automation und lasse ihn unter dem lokalen Administrator-Konto mit dem entsprechenden Passwort laufen.
$Task | Register-ScheduledTask -TaskName 'File Transfer Automation' -User 'administrator' -Password 'supersecret'
Dadurch wird das Skript registriert, und es wird nun täglich um 3 Uhr morgens alle Dateien von der Quelle zum Zielpfad kopieren.
Tipp: Laden Sie sich kostenfrei eine Testversion von MOVEit Automation, Software für die Automatisierung der Dateiübertragung, herunter.
Adam Bertram
Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.