ITよろづや

ITから生活の参考になる情報を備忘録代わりに残していきます

タスクスケジューラに設定したrobocopyのバッチファイルがUNCパスだと実行されない

Windowsのファイルコピーでよく使用するrobocopyというコマンドですが、タスクスケジューラに設定したrobocopyのバッチファイルがUNCパスだと実行されないという事象があります。

 

まず関連する情報がマイクロソフトのフォーラムに記載がありました。

 

robocopyを実行するbatを起動するタスクスケジューラが実行中のまま処理が進まない

https://social.technet.microsoft.com/Forums/ie/ja-JP/2a249d5e-443c-44ed-aeaa-813161748f64/robocopy1243423455348921237712427bat124343621521205123771242712479?forum=windowsserver2008ja

 

Windows Server 2008とありますが、Windows Server 2016以降でも同じことがいえると思います。以下は質問内容の抜粋です。

 

robocopyを実行するbatファイルを作成し、タスクスケジューラにて実行をしようとしています。

ログオンしているときのみ実行するでタスクを手動実行した場合、batファイルの内容が問題なく実行されているのですが、セキュリティオプションで、ユーザーがログオンしているかどうかにかかわらず実行するオプションにチェックをするとタスクを手動実行しても、スケジュール実行しても実行中のまま処理が進みません。

 

自己解決なのか、以下で解決したとあります。

 

実行ユーザをsystemに変更することで、制約を回避することが可能と判明

また、コピー元、コピー先フォルダの参照権限の見直しをすることで、正常に処理が完了。問題は解決しました。

 

 

robocopyをUNCパスで指定することは可能で、実際に運用でもしていますので、実行ユーザーをsystemにすることなくrobocopyは可能と思います。

 

後、コマンドプロンプトでは、cdなどコマンドがUNCパスでサポートしていないことがあるので、その場合は、以下のコマンドを利用することで、ネットワークドライブの割り当てを行うことができます。

 

pushd ¥¥testserver¥share

popd

 

ちなみに、pushdでネットワークドライブの割り当てを行い、popdで解除します。コマンドプロンプトは制約があることがあるので注意です。ちなみに、powershellであればUNCパスでもcdコマンドが使えました。