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

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

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

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

ファイルをある場所から別の場所にコピーすることは、どんな方法をとっても簡単な作業です。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.

コメント

Comments are disabled in preview mode.
トピック

Sitefinityトレーニングと認定を開始

クラス最高のSitefinityの機能を使って、魅力的なデジタル体験を提供する方法をエキスパートがお教えします。

さらに詳しく

より優れた業務アプリケーションやウェブサイトの開発に役立つ、ニュース、情報、チュートリアルをご案内します。