すべてのファイルがコピーされるのをそばで見守るほどばからしいことはありません。「スケジュールされたタスク」を利用して自動化することを考えましょう。
ファイルをある場所から別の場所にコピーすることは、どんな方法をとっても簡単な作業です。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() セクションです。これは、SourcePath と DestinationPath の2つのパラメータを含むパラメータブロックです。パラメータを使うことでスクリプトに異なる値を渡すことができ、再利用できるようになります。SourcePath と DestinationPath が実際のパスであれば、異なるファイル・コピーごとに別々のスクリプトを作成する必要があります。
このスクリプトを手動で実行するとしたら、次のようにします。
& .\CopyFiles.ps1 –SourcePath C:\Source –DestinationPath \\SERVER\Destination
この例では、C:\Source フォルダ内のすべてのファイルとサブフォルダを \\SERVER\Destination 共有フォルダにコピーします。
CopyFiles.ps1 という PowerShell スクリプトができたので、このスクリプトを起動させたいコンピュータに向かってください。このスクリプトを1日に1回、午前3時に実行する「スケジュールされたタスク」を作成することにしましょう。
タスクスケジューラのGUIを実行してスケジュールされたタスクを作成することもできますが、ここでは自動化がテーマなので、PowerShell でスケジュールされたタスクを作成する方法を示します。そのためには、次の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時に、すべてのファイルがソースからデスティネーションにコピーされます。
Subscribe to get all the news, info and tutorials you need to build better business apps and sites