automate-file-transfers

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

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

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

ファイルをある場所から別の場所にコピーすることは、どんな方法をとっても簡単な作業です。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時に、すべてのファイルがソースからデスティネーションにコピーされます。

関連ブログ


Comments
Comments are disabled in preview mode.
Loading animation