いくつかのことを行うバッチファイルを実行するスケジュールされたタスクがあります。バッチファイルで、ユーザースペースで実行される別のバッチファイルを開始したいと思います。つまり、%username%==現在ログインしているユーザーで、ユーザー権限などがあります。スケジュールされたタスクがSYSTEM権限で実行されている場合、現在のユーザーでコマンドを実行するにはどうすればよいですか。
これは、Windows XPとWindows7の両方に必要です。
ターミナルサービスの導入以来、「現在のユーザー」は複数形になる可能性があります。 XPでも、高速ユーザー切り替えをサポートします。
最も近いのは「コンソールセッションに接続しているユーザー」です。これには、 WTSGetActiveConsoleSessionId() + WTSQueryUserToken() + CreateEnvironmentBlock() + CreateProcessAsUser() を使用します。
私はこれを書きました: https://Gist.github.com/871048 –コンパイルし、バッチファイルへのフルパスを引数として実行します。
はい、これには.NETランタイムが必要ですが、システムにすでにインストールされている可能性があります。コンパイラーのランタイム部分も:%SystemRoot%\Microsoft.NET\Framework64\v3.5\csc.exe
(v2.*
で始まるすべてのバージョンが機能します)。
注:WTSQueryUserToken()では、プログラムがLocalSystemとして実行されている必要があります。 ( ドキュメント によると、SeTcbPrivilegeは十分ではありませんが、チェックしていません。)
「タスクを実行するときは、次のユーザーアカウントを使用します。」で「BUILTIN\Users」グループに設定すると、現在ログインしているユーザーとしてタスクが実行されます。
現在ログインしているユーザーを動的に使用するようにタスクスケジューラツールで設定することはできないと思いますが、タスク自体でシステム以外に使用するユーザーアカウントを指定することはできます。以下の両方のオプションでは、ユーザー名のパスワードが必要です。
Windows 7:タスクのプロパティウィンドウに、[セキュリティオプション]に[ユーザーまたはグループの変更]というボタンがあります。
Windows XP:タスクのプロパティウィンドウで、[実行者]フィールドにユーザー名を入力できます。
最後のオプションの1つは、ユーザーがログオンしたときにタスクを作成する起動スクリプトと、ユーザーがログオフしたときにタスクを削除するコンパニオンログオフスクリプトを作成することです。コマンドは「Schtasks」で、XPと7)でほぼ同じです。コマンドのドキュメントは、MSの次のサイトから入手できます。 http://www.Microsoft。 com/resources/documentation/windows/xp/all/proddocs/en-us/schtasks.mspx?mfr = true