it-swarm-ja.com

Windowsタスクスケジューラは、システム以外のドライブでファイルを実行しません

E:/ドライブで実行する必要のある実行可能ファイルがあります。WindowsServer2012はC:/ドライブにインストールされています。ターゲット実行可能ファイル(E:/stuff/target.exe)へのフルパスと、作業ディレクトリセット(E:/ stuff /)を持つスケジュールされたタスクを作成しました。

これは失敗します。タスクスケジューラは、ディレクトリ名が無効であることを通知します。作業ディレクトリを削除すると、アクセスが拒否されたと表示されます。これは正しくありません。ドライブ全体が共有され、ファイルのアクセス許可がフルコントロールで「全員」に設定されています。タスクを実行しているアカウントは間違いなくそれを実行できます(私はcmd.exeを介して実行できます)。 補足:バックスラッシュ、フォワードスラッシュ、引用符、および非引用符を使用して、パスのすべての順列を試しました。これは KB245272 によるものではありません。

「CD」を使用して作業ディレクトリをE:/ stuff /に設定し、実行時に機能するプログラムを呼び出すバッチファイルを作成してみました。残念ながら、タスクスケジューラを介して実行すると、作業ディレクトリが変更されることはなく、システムドライブ(存在しない場合)からtarget.exeを呼び出そうとします。

また、C:/ temp /からE:/ stuff /へのシンボリックリンク( "mklink/D")を作成しようとしましたが、タスクスケジューラをだますことができると期待していましたが、リンクをたどりません。ディレクトリが見つからなかったと教えてくれます。

タスクスケジューラがこれほど激しく戦う理由も、これを機能させるための正しい方法もわかりません。誰かがタスクスケジューラを使用して非システムドライブでファイルを正常に実行しましたか?

1
Knetic

頭を壁に数時間ぶつけた後、私は解決策を見つけました。 Server 2012では、スケジュールされたタスクは、ファイルの実行に使用しているアカウントの明示的な許可アクセス許可を持たないディレクトリにアクセスできないようです。そのアカウントがディレクトリへのアクセスを許可されているグループに含まれているかどうかは関係ありません。

たとえば、アカウントTHINGS\svcAccountを使用してE:/stuff/target.exeを実行する場合、THINGS\svcAccount 必須実行するには、E:/ stuffを明示的に完全に制御する必要があります。 THINGS\svcAccountがadministratorsグループにあり、administratorグループがE:/ stuffを完全に制御できる場合、アクセス許可を継承すると想定していました。 Server2012はそれを行いません。

これは、スケジュールされたタスクにのみ適用されるようです。THINGS\ svcAccountが期待どおりに機能するため、コマンドウィンドウまたはPowerShellウィンドウを実行します。

5
Knetic

ドライブマッピングは、サービスやタスクには表示されません。代わりにUNCパスを使用してください。

\\server\share\directory\someprogram.exe

別のオプションは、実行するバッチファイルをスケジュールし、そこにドライブマッピングを含めることです。バッチファイルでは、 pushd/popd を使用して、取得するドライブ文字を気にせずにマップする方が簡単です(pushdはドライブ文字にマップしてそのドライブ文字に切り替えることができ、popdはマップを解除してに戻ることができます)前のドライブ文字)。

pushd \\server\share
\directory\someprogram.exe
popd
3
Brian