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