2

VBScript - リモート ワークステーションがログイン画面に表示されているかどうかを確認するにはどうすればよいですか? コンピューターにアクティブなユーザーがログインしているかどうかを確認する方法を知っています。コンピュータがログイン画面にある場合、そのスクリプトはログインしているユーザーがいないことを示します。ただし、「ログインしているユーザー」スクリプトは、スタートアップ スクリプトのロード中に「ユーザーがログインしていません」と報告することもあります。また、ワークステーションがロックされているかどうかを知る必要もありません。コンピューターが具体的にログイン資格情報の入力を求めているのか、それとも「CTRL + ALT + DEL を押してログインしてください」と言っているのかを判断する方法はありますか?

私は自分が知っている最善の方法で検索しましたが、これまでの試みは成功していません。

どんな助けでも大歓迎です!

4

2 に答える 2

1

と の組み合わせを試すことができWin32_ProcessますWin32_LogonSession

computer = "..."

Set wmi = GetObject("winmgmts://" & computer & "/root/cimv2")

logonScreenCount = wmi.ExecQuery _
  ("SELECT * FROM Win32_Process WHERE Name = 'LogonUI.exe'").Count
interactiveUserCount = wmi.ExecQuery _
  ("SELECT * FROM Win32_LogonSession WHERE LogonType = 2").Count

If logonScreenCount = 1 And interactiveUserCount = 0 Then
  WScript.Echo "Logon screen is being displayed"
End If

Win32_Processログオン画面プロセスが実行されているかどうかを確認するクエリと、Win32_LogonSessionユーザーが対話的にログインしているかどうかを確認するクエリです。考えられる組み合わせは次のとおりです。

  • logonScreenCount = 0、interactiveUserCount = 0:
    システムの起動が完了していない可能性があります (ログオン画面も対話型ログオンもありません)。

  • logonScreenCount = 1、interactiveUserCount = 0:
    システムは起動しており、ログオン画面は表示されていますが、ユーザーがログインしていません。

  • logonScreenCount = 0、interactiveUserCount = 1:
    システムは起動しており、ユーザーはコンソールにログインしています。

クエリを繰り返しても変更は反映されないことに注意してください。GetObject()WMI オブジェクトを更新するには、再度実行する必要があります。

また、上記のコード スニペットは、システムの起動中にリモート ホスト上の RPC サーバーが使用できないなどのエラーを処理しないことに注意してください。

于 2012-11-06T13:16:03.690 に答える
0

次の投稿を確認することをお勧めし ます。Windowsログイン画面がVB.NETのユーザーに表示されているかどうかの検出

私はそれがあなたの求めていることではないことを知っていますが、答えの1つは、WTSRegisterSessionNotificationの概要を説明するMSDNの記事へのリンクを提供します。

于 2012-11-05T19:30:54.373 に答える