2015年4月28日火曜日

リモートデスクトップ終了後にログイン画面を表示させない方法



色々探していたらProfessionalエディション以上であれば「tscon.exe」で制御できる事がわかった。

これにイベントログからリモートデスクトップ切断イベントを作成しておいて、リモートデスクトップ切断検知したら自動的にバッチ実行してくれるようにできたのでやり方を紹介。




エクスポートしたファイルをダウンロードして
 http://1drv.ms/1P0Fkyo


リモート先のデスクトップPCに下記設定を行う。


 リモートデスクトップ切断フィルタ.xml ・・・ イベントビューアーを開いてインポート

 リモートデスクトップ切断後の処理.xml ・・・ タスクスケジューラを開いてインポート




上記のような感じになっていればOK。

Anthorは各自好みに合わせて設定してください。

現在ログインしているユーザー名の取得方法は
コマンドライン上で

 whoami

タスクスケジューラの登録は、

 schtasks /Create /XML "remotetasks.xml" /TN test1


イベントビューアのカスタムビューは手動登録でおこなうこと。

コマンドラインのショートカットメモ

 コンピュータの管理を開く
  compmgmt.msc

 イベントビューアーを開く
  eventvwr

 タスクスケジューラ
  taskschd.msc


以下は参考URLから引用&一部Windows8.1用に改定
---


まず最初に、リモートデスクトップの切断を検知する方法から調べてみよう。

コントロールパネルの管理者ツールからイベントビューアを起動する。
Windows7のイベントビューアはごちゃごちゃしていて見づらいが仕方がない。

アプリケーションとサービスログ > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational

と、ツリーを展開していく。ここがリモートデスクトップのログの場所だ。既に何度かリモートデスクトップを利用しているなら再接続に成功したり、切断されたり、色々な種類のログが確認できるはずだ。

では、ここから切断時のログだけをピンポイントに抜き出してみよう。

カスタムビューと書かれたラベルを右クリックし、「カスタムビューの作成」を選択する。
「ログごと」にチェックが入っていることを確認し、「イベントログ」の右のコンボボックスの▼を押して
アプリケーションとサービスログ > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational
を選択する。

ここまでは比較的簡単。大変なのはここからである。

右側にある操作タブ内にある「現在のログをフィルター」選択して「XML」タブに切り替える。
「手動でクエリを編集する」にチェックを入れる。確認が表示されるが「はい」を選ぶ。

<Select Path="Microsoft-Windows-TerminalServices-LocalSessionManager/Operational">*</Select>

となっている部分を

<Select Path="Microsoft-Windows-TerminalServices-LocalSessionManager/Operational">*[System[EventID=24 and Level=4] and UserData/EventXML/Address!='ローカル']</Select>

と書き換える。これで、ローカル「以外」から切断した場合だけを取得するようにXPath形式で指定したことになる。

「OK」を押し、フィルターをカスタムビューに保存...を選択して、「リモートデスクトップ切断」とでも名前を付けて更に「OK」を押す。

これで屋外からリモートデスクトップで切断した時のログだけを抽出することが出来るようになったはずだ。


次に、「リモートデスクトップ切断」にログが追加される度にプログラムを起動する方法について説明する。

先程保存した「リモートデスクトップ切断」を右クリックし、「このカスタムビューにタスクを設定」を選択する。
「基本タスクの作成」で「リモートデスクトップ切断後の処理」とでも名前を付けて「次へ」をクリック。
「イベントログへの記録時」でカスタムイベントフィルターと表示されていることを確認して「次へ」をクリック。
「操作」で「プログラムの開始」を選択して「次へ」をクリック。
「プログラム/スクリプト」に「tscon」、「引数の追加」に「RDP-Tcp#0 /dest:console」と入力して「次へ」
「[完了]をクリックしたときに、このタスクの[プロパティ]ダイアログを開く」にチェックを入れて「完了」をクリック。

まだまだ続く。次はプロパティダイアログにて。

「全般」タブの中で、「ユーザがログオンしているかどうかにかかわらず実行する」にチェックを入れる。 念のため「パスワードを保存しない」のチェックは外しておこう。そして「最上位の特権で実行する」にチェックを入れる。
「条件」タブの中で、「タスクを実行するためにスリープを解除する」にチェックを入れる。
「設定」タブの中で、「タスクを要求時に実行する」だけON、他のチェックは全てOFFにする。
「OK」を押してダイアログを閉じる。パスワードを聞かれた場合は入力する。

これで「リモートデスクトップ切断時に自動的にコンソールセッションをアクティブにする」ことが出来るようになった。もう×ボタンで閉じようが、タイムアウトで勝手に切断されようが関係ない。

作成したタスクはコントロールパネルの「管理ツール」→「タスクスケジューラ」の「イベントビューアータスク」で確認することが出来る。

---


参考URL
 http://eila-nya.blogspot.jp/2014/04/windows7-part2.html
コメントを投稿

Androider