スケジュールされたタスクを使用してファイル転送を自動化する方法

投稿者: Adam Bertram 投稿日: 2018年9月24

すべてのファイルがコピーされるのをそばで見守るほどばからしいことはありません。「スケジュールされたタスク」を利用して自動化することを考えましょう。

ファイルをある場所から別の場所にコピーすることは、どんな方法をとっても簡単な作業です。Windows エクスプローラでファイルをドラッグ・アンド・ドロップする方法、PowerShell で Copy-Item を行う方法、DOSで単純なコピーコマンドを使用する方法など、さまざまな方法があります。ソースとデスティネーションのパスを指定し、その他のオプションのパラメータをいくつか設定するだけです。問題に遭遇するのは、多数のファイルを頻繁にコピーする必要が生じたときです。

ファイル・コピーを自動化する場合、特に Windows 環境では、よく使われるスクリプト言語は、Windows の PowerShell です。1つ以上のファイルをある所から別のデスティネーションに手早くコピーする必要がある場合は、PowerShell が大変便利です。PowerShell スクリプトは簡単に手動で開始できますが、Windows のスケジュールされたタスクを使用して PowerShell スクリプト経由で転送を開始することもできます。

このブログでは、スクリプトを書いてそのスクリプトを定期的に実行する「スケジュールされたタスク」を作成するという形をとって、PowerShell を使用してファイルを転送する方法について説明します。始める前に、PowerShell v4 以降のバージョンががコンピュータにインストールされていることを前提としていることをお断りしておきます。古いバージョンの場合は、ここで説明する通りには動作しないかもしれません。

スクリプトを作成

最初に、ファイル転送を実行するスクリプトを作成する必要があります。CopyFiles.ps1 と呼ぶことにしましょう。このスクリプトには次のコードが含まれます:

param(

[string]$SourcePath,

[string]$DestinationPath

)

Copy-Item –Path $SourcePath –Destination $DestinationPath -Recurse

ご覧のように、スクリプトはシンプルですが、環境に応じて多くのカスタマイズが可能です。

このスクリプトの最も複雑な部分は param() セクションです。これは、SourcePathDestinationPath の2つのパラメータを含むパラメータブロックです。パラメータを使うことでスクリプトに異なる値を渡すことができ、再利用できるようになります。SourcePathDestinationPath が実際のパスであれば、異なるファイル・コピーごとに別々のスクリプトを作成する必要があります。

このスクリプトを手動で実行するとしたら、次のようにします。

& .\CopyFiles.ps1 –SourcePath C:\Source –DestinationPath \\SERVER\Destination

この例では、C:\Source フォルダ内のすべてのファイルとサブフォルダを \\SERVER\Destination 共有フォルダにコピーします。

スケジュールされたタスクの作成

CopyFiles.ps1 という PowerShell スクリプトができたので、このスクリプトを起動させたいコンピュータに向かってください。このスクリプトを1日に1回、午前3時に実行する「スケジュールされたタスク」を作成することにしましょう。

タスクスケジューラのGUIを実行してスケジュールされたタスクを作成することもできますが、ここでは自動化がテーマなので、PowerShell でスケジュールされたタスクを作成する方法を示します。そのためには、次の4つのステップが必要です。

  1. スケジュールされたタスクのアクションを作成
  2. トリガーを作成
  3. スケジュールされたタスクをメモリに作成
  4. スケジュールされたタスクをコンピュータ上に作成

具体的には、次のようになります。まず、スケジュールされたタスクのアクションを作成します。これは、任意の引数とともに実行するEXEを定義します。スクリプトが C:\CopyFiles.ps1 にあると仮定しています。

$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'"

次に、毎日午前3時に開始するトリガーを作成します。

$Trigger = New-ScheduledTaskTrigger -Daily -At '3AM'

その次は、作成したアクションとトリガーを使用して、スケジュールされたタスクをメモリに作成します。

$Task = New-ScheduledTask -Action $Action -Trigger $Trigger -Settings (New-ScheduledTaskSettingsSet)

最後に、スケジュールされたタスクをシステム上に作成します。File Transfer Automation と名付け、提供されたパスワードを使用してローカル管理者のアカウントで実行します。

$Task | Register-ScheduledTask -TaskName 'File Transfer Automation' -User 'administrator' -Password 'supersecret'

これでスクリプトが登録され、毎日午前3時に、すべてのファイルがソースからデスティネーションにコピーされます。


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.
著者が作成したブログ

関連タグ

関連記事

ファイル転送プロトコル (FTP) とマネージド・ファイル・トランスファー (MFT) の比較
「情報経済ではデータが王様」という格言があり、データ窃盗は数十億ドル規模の世界的な産業になっています。ユーザーとの間で、またはパートナーや顧客との間で、あるいは様々な場所において、データファイルをやりとりすることは、業務処理の重要なプロセスになっていますが、データファイルの扱い方には慎重の上にも慎重を期する必要があります。
コンチネンタル・オートモーティブはスクリプトをやめてファイル転送を自動化
コンチネンタル・オートモーティブは世界55カ国で20万人以上を雇用する自動車メーカーです。5つの部門とグローバルネットワークを持ち、数千の社内外の顧客、サプライヤー、ユーザーの間で多くのファイル転送アクティビティが発生します。
Prefooter Dots
Subscribe Icon

Latest Stories in Your Inbox

Subscribe to get all the news, info and tutorials you need to build better business apps and sites

The specified form no longer exists or is currently unpublished.