QA@IT
«質問へ戻る

質問を投稿

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

初めて投稿します。

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% より求めるためです。

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

初めて投稿します。

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%` より求めるためです。

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