他の誰かが、現在ログオンしているユーザーがWindows 7環境でリモートにいるのかを判断する必要がありましたか?.NET 4.0とC#を使用しています。環境はXPと7が混在しています。
- セッションを含むWMIクエリでは、すべてのアクティブなセッションが生成されますが、インタラクティブなセッションは生成されません。
- ComputerSystem(WMI)のUserNameは、ユーザーがリモートデスクトップ経由で接続している場合、null例外を返します。これは、このメソッドを使用できないほど一般的です。
PsLoggedOn
私の目的には時間がかかりすぎて(はい、300ミリ秒は長すぎます)、驚くべきことに100%正確ではありません- p / invokeを使用する
WTSGetActiveConsoleSessionID
か、LsaEnumerateLogonSessions
複雑すぎてメモリリークが発生しやすい(私が読んだものから) tasklist /S <computername>
XPシステムの情報を返しますが、その素敵なUACのおかげでWindows7は満足のいくものではありません。- パーミッションの制限により、HKCU(winレジストリ)にリモートでアクセスできません。HKUにはアクセスできますが、VolatileEnvironmentには「アクティブ」のタグがないようです。
これまでのところ、最も信頼できる方法は、コマンドラインからPsExec
リモートで実行qwinsta
し、出力をテキストにリモートでトラバースすることです。これは面倒で時間がかかります(以上PsLoggedOn
)が、信頼性のためにここでアイデアが不足しています。速度よりも信頼性がありますが、コストメリットの観点から速度は非常に重要です。
サードパーティのツールはオプションではなく、スクリプト、できればWMIとC#である必要があります。プリンシパルオブジェクトを使用してDCをヒットすることを掘り下げましたが、もっと混乱したのではないかと思います。また、すべてのユーザーアカウントは管理者です。
私はグーグルでたくさんの研究をしました、しかし私は多分私が間違った場所を見ていると思っています。
テイカーはいますか?