Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【JP1/AJS】bitsadminがジョブで動かない?PowerShellのInvoke-WebRequestでWebファイルを安全にダウンロードする方法

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

運用自動化の強い味方「JP1/AJS」。日々の運用の中で、「Web上にある最新のファイルを定期的にダウンロードして処理させたい」という場面はよくありますよね。

しかし、Windowsの標準コマンドであるbitsadminを使ってジョブを組んだところ、手動では動くのにJP1経由だと全く動かないという謎の現象に遭遇しました。

今回は、この問題の解決策と、なぜ動作に違いが出たのかという考察をブログにまとめました!

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

❌ 遭遇したトラブル:bitsadminがJP1からだと動かない!

WindowsでWeb上のファイルをコマンドラインからダウンロードする際、手軽に使われるのが bitsadmin コマンドです。

最初は、JP1のジョブに直接コマンドを書いたり、コマンドを記述したバッチファイル(.bat)をJP1から呼び出す構成にしたりしていました。

  • 手動(コマンドプロンプトやバッチ単体ダブルクリック) ➔ 問題なくダウンロードできる

  • JP1ジョブ経由 ➔ シーンと静まり返って、どうやっても動かない

「バッチ自体は間違っていないのになぜ……?」と頭を抱えることになりました。

💡 解決策:困ったときの「PowerShell」切り替えで大成功

今回に限らず、バッチファイル(コマンドプロンプト)で行き詰まったときの私のノウハウが、「PowerShellに同様の機能を持つコマンドがないか探す」というアプローチです。

調べてみると、PowerShellには Invoke-WebRequest という強力なコマンドがあることが判明。さっそくこれを使ったスクリプト(.ps1)を作成し、JP1に組み込んでみたところ、何事もなかったかのように一発で正常にダウンロードできました!

実際に成功したJP1のジョブ設定と、PowerShellの中身は以下の通りです。

1. ps1ファイルの中身(例:XXXX.ps1)

PowerShell

Invoke-WebRequest -Uri "https://example.com/targetfile.csv" -OutFile "C:\App\download\targetfile.csv"

2. JP1ジョブの設定内容

PowerShellスクリプトをJP1から安全に実行し、エラーも検知できるように以下のようにパラメーターを設定します。

  • 実行ファイル名: powershell

  • パラメーター: -command "C:\Path\To\XXXX.ps1; exit $LASTEXITCODE"

※末尾に exit $LASTEXITCODE をつけておくことで、PowerShell内でエラーが起きた際、JP1側にもちゃんと異常終了(戻り値)を伝えることができるのがポイントです。

❓ なぜ「bat(bitsadmin)」と「ps1」で違いが出たのか?【AI調べ】

普通に実行すると動くのに、JP1からだと bitsadmin が動かなかった理由。実行権限の違いのようにも思えますが、実は「実行コンテキスト(セッションと環境設定)」の違いが原因である可能性が高いです。

1. bitsadminは「非対話セッション」や「サービスアカウント」に弱い

JP1ジョブは通常、バックグラウンドの「非対話セッション(画面がない状態)」かつ、特定の「OSユーザー(またはSYSTEMアカウント)」の権限で実行されます。 bitsadmin(Background Intelligent Transfer Service)は、Windowsのバックグラウンド転送サービスを利用するため、「ログインしているユーザーのセッション」に強く依存する傾向があります。画面のない裏側のセッションから叩かれると、タスクのキュー登録に失敗したり、進行が止まってしまったりすることが多いのです。

2. プロキシ設定の壁

bitsadmin は、実行したユーザーがIEやEdgeで設定しているプロキシ設定を参照することがあります。JP1経由で動かすと「プロキシ設定がないユーザー」として動いてしまい、Webへのアクセス自体がブロックされていた可能性もあります。

💡 一方、PowerShell(Invoke-WebRequest)は?

Invoke-WebRequest は、純粋に.NETの機能を使って自前でHTTPリクエストを投げるため、実行しているセッションが画面の有無(対話・非対話)に関わらず、非常に安定して動作します。環境に左右されにくいため、JP1のような自動化ツールとの相性が抜群に良いのです。

まとめ:JP1のWebダウンロードはPowerShell一択!

Windowsでファイルダウンロードといえば昔は bitsadminvbs が定番でしたが、現代の環境(特にJP1などのジョブ管理ツール下)においては、環境に左右されず安定して動くPowerShell(Invoke-WebRequest)を使うのがベストプラクティスだと言えます。

「手動では動くのにJP1だとバッチが動かない!」とお悩みの方は、ぜひPowerShellへの切り替えを試してみてください。驚くほどあっさり解決するかもしれません!

タイトルとURLをコピーしました