web-dev-qa-db-ja.com

別のログインユーザーのコマンドラインからプログラムを開始できますか?

ターミナルサービスを実行しているWindowsServer2008マシンがあります。ユーザーがログインすると、カスタムプログラムが起動され、システムトレイに常駐して、当社用にカスタマイズされたホットキーをユーザーに提供します。

このプログラムを更新する必要がある場合、新しいバージョンが実際に有効になる前に、すべてのセッションからプログラムのすべてのコピーを閉じる必要があります( 詳細はこちら )。 Taskkill を使用すると、すべてのセッションのプロセスを簡単に終了できますが、後ですべてのセッションのプロセスを再開する簡単な方法があるかどうかを知りたいです。

管理者アカウントにはアクセスできますが、他のユーザーパスワードにはアクセスできません。

ログインしている別のユーザーのコマンドラインからプログラムを起動することはできますか?

5
Rachel

いいえ。Windowsは、ここで求めている種類のユーザー偽装機能を提供していません。 Windowsには、Sudoに相当するものはなく、近似値さえありません。

現時点ではドキュメントや記事が見つかりませんが、WindowsでSudoスタイルのユーザー偽装機能を許可しないことは、NTカーネルの初期の頃の意図的な設計上の決定であり、その結果、私たちはそれに非常に固執しています。 (通常のように、それを回避するための巧妙な回避策やハックすらありません。これは、あまりにも深く根付いているため、回避できません。)

Windowsの世界では、ユーザーとして[実際に]アクションを実行するには(プログラムの実行、ADに対する認証など)、識別に使用される アクセストークン が必要です。ユーザーのアクセス/特権を認証します。このアクセストークンは、ユーザーのアカウント名とパスワードが指定されたときにonly作成されます(ログイン時、RunAsなど)。

(あなたの目的のために)潜在的に重要な警告は、既存の アクセストークンは複製可能偽装トークン に渡される可能性があることです。これは ImpersonateLoggedOnUser関数に渡すことができます) 、これを使用して ログオンしたユーザーのセキュリティコンテキストを偽装する

あなたが.NETの難解なマジックを扱う方法を知っているかもしれない開発者/プログラマーの一人であると考えると、これはあなたがやりたいことを達成するための小さなアプリケーションを書くのに役立つかもしれません。

ただし、正確に言うと、Windowsユーザーになりすますために実行または処理できるコマンドはありません。コーディングする(またはコーディングした他のユーザーを見つける)以外は、アクセストークンを持つユーザーに限定されます。利用可能です(ユーザーにログオン)。

4
HopelessN00b

ユーザーがログオンしている場合は、 owexec のようなものを使用して、プロセスをユーザーとして起動できます。パスワードは必要ありません。ターミナルサービスの部分を除いて、あなたが説明するものと非常によく似た目的で使用します。

すべてのアクティブなセッションを収集するためにスクリプトを追加してから、-uオプションを使用してそれぞれを個別にターゲットにする必要がある場合があります。

2
jscott