構成に基づいて、いくつかのファイルとフォルダーの自動バックアップを実行しようとしています。これは、Powershell 5を使用して実行されます。Powershell5は、バックグラウンドインテリジェント転送サービス(BITS)に依存しています。例えば。:
Start-BitsTransfer $Source\* $Destination -RetryInterval 60 -RetryTimeout 600
Powershellスクリプトは、バットを使用して実行されます。
powershell -ExecutionPolicy unrestricted .\Main.ps1
バッチは、スケジュールされたタスクを使用して実行されます。
User account: AD service account
Run: whether user is logged on or not
スケジュールされたタスクに設定された同じアカウントを使用してバッチを直接実行すると、完全に実行されます。タスクスケジューラから実行すると、BITS操作で次のエラーが発生します。
ユーザーがネットワークにログオンしていないため、要求されている操作は実行されませんでした。指定されたサービスは存在しません。 (HRESULTからの例外:0x800704DD)
スケジュールされたタスクに使用するのと同じサービスアカウントに設定して、BITSサービスのユーザーを変更しようとしましたが、サービスが開始されなくなりました。
次のエラーが原因で、バックグラウンドインテリジェント転送サービスサービスを開始できませんでした。
このサービスに指定されたアカウントは、同じプロセスで実行されている他のサービスに指定されたアカウントとは異なります。
スケジュールされたタスクに戻り、「ユーザーがログオンしているときのみ」実行するように変更しました。もちろん、これは、このユーザーに自動ログオンを設定した場合にのみ意味があります(そうでない場合、ログインしていないと実行されません)。
質問:自動ログオンなどのトリックに頼らずにBITSを使用してバックアップを自動化するにはどうすればよいですか?
ログインしている場合にのみ、そのスクリプトを実行できるようです。MSのドキュメント「WindowsPowershellを使用したジョブの作成BITS転送ジョブ」」から ここ 。
Windowsサービスなどの非対話型コンテキストで実行されるプロセス内から* -BitsTransferコマンドレットを使用すると、ファイルをBITSジョブに追加できない場合があり、その結果、一時停止状態。ジョブを続行するには、転送ジョブの作成に使用されたIDがログオンしている必要があります。たとえば、次のように実行されたPowerShellスクリプトでBITSジョブを作成する場合タスクスケジューラジョブの場合、BITS転送は、タスクスケジューラのタスク設定「ユーザーがログオンしているときにのみ実行する」が有効になっていない限り完了しません。
代わりに robocopy を使用してみてください。