QA@IT

ログオフ状態(タスクスケジュール)で実行したバッチの環境変数について

11828 PV

初めて投稿します。

Windows Server 2012 で、"set" コマンドの結果をファイルに出力するバッチファイルをタスクスケジューラに登録しています。
バッチファイルの内容は set>c:\temp\env.log

タスクの設定内容としては、

  • 『タスクの実行時に使うユーザーアカウント』 : ローカルのAdministrator
  • ユーザーがログオンしているかどうかにかかわらず実行する
  • 最上位の特権で実行する を指定しています。

上記の内容で、ログオフ状態で定時実行した場合と、ログインした状態で手動で実行した場合の出力結果に差異があります。

※一部抜粋
<ログオン状態(手動実行)>

APPDATA=C:\Users\Administrator\AppData\Roaming
USERPROFILE=C:\Users\Administrator

<ログオフ状態(定時実行)>

APPDATA(定義なし(DOSでいうところのnot defined))
USERPROFILE=C:\Users\Default

タスク設定の『タスクの実行時に使うユーザーアカウント』に指定しているユーザーのプロファイルがロードされる認識でしたが、ログオフ状態で実行した場合は、ロードされずに実行されている、といったところでしょうか。
Windows Server 2003 でも同現象を確認しており、2003 R2, 2008, 2008 R2 においては、『タスクの実行時に使うユーザーアカウント』に指定しているユーザーのプロファイルが設定されるようです。

そもそもの目的としては、定期的に PostgreSQL の自動バックアップを行う必要があり、pg_dump プロセスが認証のために参照する pgpass.conf のパスを、%APPDATA% より求めるためです。

同様な現象を回避/解消された方おられますでしょうか?
よろしくお願いいたします。

  • 私のところでも再現しましたけど、有益なのは見当たらないですね。exeに対しては cmd /c start ~.exe で起動しろって言うのも軽く試した感じではうまくいかず、バッチはCUIからタスクスケジューラに設定した方が良いというのも見かけましたが時間がないのでためしていません。 -
  • コメント、ありがとうございます。
    当方においても、タスクスケジューラへはCUIから登録しているのですが、結果は変わらずでした。。。
    -
  • 再現しました。
    バッチファイルに環境変数を定義し、タスクで起動したらpg_dumpallが動きました。

    set APPDATA=C:\Users\Administrator\AppData\Roaming
    set USERPROFILE=C:\Users\Administrator

    "C:\Program Files\PostgreSQL\9.3\bin\pg_dumpal ..略
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。