S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

タスクスケジューラへの登録でエラー

Windows 7 / Windows Server 2008 R2
タスクスケジューラのタスクの登録で、セキュリティオプションで「ユーザーがログオンしているかどうかにかかわらず実行する」にチェックすると、

タスクxxxでエラーが発生しました。エラーメッセージ:次のエラーが報告されました:指定されたログオンセッションは存在しません。そのセッションは既に終了している可能性があります。。

ってなダイアログが表示される。
但し、お客さんの環境だけで会社の環境では問題なくタスクが登録される。

ログオンセッション?

Administrators権限のユーザーで登録しようとしてて、最初リモートデスクトップでタスクの登録をしていたので、リモートデスクトップの接続でセッションを使ってるってことか?と思って、仮想マシン上だったのでVMwareのコンソールで操作したけど、同じ結果だった。
VMwareのコンソールでもセッション使うからかな?と。

イベントログ

エラーメッセージのダイアログが表示されるタイミングで、下記のログが記録されてた。

ソース:TaskScheduler
イベントID:116
メッセージ:タスクスケジューラでタスク"xxx"の構成を検証しましたが、資格情報を格納できませんでした。ユーザー操作:資格情報が有効であることを確認し、タスクを再登録します。追加データ:エラー値:2147943712。

エラー値:2147943712

Task Scheduler: Error 2147943712 occurs whether user is logged on
Windows 2008 / Vista / 7, Scheduled Task – error 2147943712 - Nejde jen o software... - Site Home - TechNet Blogs
ってなページで「Network access: Do not allow storage of credentials or .NET Passports for network authentication」っちゅう設定が関係してるって所に辿りついた。

ローカルポリシーのセキュリティオプション

これは、「ネットワーク アクセス : ネットワーク認証のために資格情報または .NET Passport を保存することを許可しない」になるけど、これって2003(Vista/2008無印も?)の設定で、7/2008R2では「ネットワーク認証のためにパスワードおよび資格情報を保存することを許可しない」という設定名に相当する。
3流プログラマのメモ書き : (Windows)共有フォルダへのアクセスのための資格情報を保存させない
そりゃセキュリティポリシー的に資格情報保存させたくないわな、ということでお客さんの環境を確認すると、ADのグループポリシーで「有効」となってた。
会社のサーバは開発用にワークグループにしてるだけなので、既定値の「無効」になってる。
こいつの設定により、登録できたり、できなかったりしてたらしい。

回避策

ビルトインアカウントのSYSTEMを使うと、Administrators権限でタスクを起動してくれるらしい。
タスクスケジューラのタスクのプロパティの「ユーザーまたはグループの変更」で、ローカルマシンのSYSTEMを指定すると、タスク登録時に資格情報(ユーザー名とパスワード)の入力が催促されずに登録できた。メデタシメデタシ。
一時的にSystemアカウントでプログラムを実行する − @IT
サービスで使用される「System」「Local Service」「Network Service」アカウントとは? − @IT