リモートWindowsマシンにログオンしているユーザーを検出する


9

リモートのWindowsマシンに誰がログオンしているかをどのようにして見つけますか?

現在psloggedonを使用していますが、一度に1台のコンピューターしか使用できません。

psloggeon \\ 172.21.0.5

psloggedon

サブネット全体をスキャンするより良い方法はありますか?できれば、いくつかのGUIアプリケーション。

回答:


9

GUIではありませんが、

for /L %x in (2,1,254) do psloggedon \\172.21.0.%x

172.21.0.2-254からスキャンを実行します。ネストすることもできます:

for /L %z in (16,1,31) do for /L %x in (1,1,254)  do psloggedon \\172.21.%y.%x

これにより、172.21。{16-31} .xサブネットがスキャンされます。


良いですが、問題はすべてのIPアドレスを試すことです。ホストがアクティブでない場合は、ホストが30秒ほどハングしてから続行します。出力も少し乱雑です。
ジンドリッチ

マシンに対してpingを実行して(ping xxxx -n 1)、その出力を確認できます。これにより、任意のマシンに対するタイムアウトがpingに対して1秒になります
benPearce

8

このスクリプトを見つけました。ドメイン全体をスキャンし、優れた出力(コンピューター名とユーザー名)を提供します。

whoisloggedinwhere.bat> users.txt

@エコーオフ
セットローカル
/ f "Tokens = 1" %% cの場合( 'net view / domain: "%USERDOMAIN%" ^ | Findstr / L / C: "\\"')do(
 / f "Tokens = *" %% u in( 'PsLoggedOn -L %% c ^ | find / i "%USERDOMAIN%\"')do(
  呼び出し:レポート%% c "%% u"
 )
)
エンドローカル
goto:EOF
:報告する
仕事=%1を設定
comp =%work:〜2%を設定
ユーザーを設定=%2
set user =%user: "=%
コールセットユーザー= %% user:*%USERDOMAIN%\ = %%
@echo%comp%%user%

このスクリプトはPsLoggedOnを使用します



2

ログオンスクリプトを使用してコンピューターの説明のプロパティにユーザー名を書き込みます。これにより、ADユーザーとコンピューターですべてを表示したり、検索を実行したりできます。とても便利な。


1

サーバーがターミナルサービスを実行している場合は、ターミナルサービスマネージャーを使用して、ドメイン内のサーバーとログオンしているサーバーを表示できます。これはGUIであり、以下にあります

Start -> Administrative Tools -> Terminal Services Manager

1

qwinstaは別のdosコマンドですが、一度に1つしか与えられません...

C:\>qwinsta /server:test_srv
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 console           test_usr                  0  Active  wdcon
 rdp-tcp                                 65536  Listen  rdpwd

1

次のPowerShellスクリプトを使用してWMIを照会することにより、ワークステーションにローカルにログオンしているユーザーを検出できます。ローカルにログオンしているユーザーの名前または空の文字列を返します。

function logged_in($host_name) {
    (get-wmiobject -class Win32_ComputerSystem -computername $host_name `
        -namespace "root\CIMV2").UserName
}

0

どこで取得したのかはわかりませんが、マシンのユーザーを示すこのコードを配置しています。これをfor eachループでラップして、多数のマシンをスキャンできます。システムに誰がログオンしているかを知りたい場合、最も簡単な方法は、ログイン監査をオンにして、セキュリティログを確認(またはクエリ)することです。以下は、ある時点で誰がオンになっているかを確認するコードです。

' PARAMETERS
'
strComputer = "machineName"   ' use "." for local computer 
strUser = "domain\user" ' comment this line for current user
strPassword = "password" ' comment this line for current user

' CONSTANTS
'
wbemImpersonationLevelImpersonate = 3
wbemAuthenticationLevelPktPrivacy = 6

'=======================================================================
' MAIN
'=======================================================================

' Connect to machine
'
If Not strUser = "" Then

    ' Connect using user and password
    '
    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMI = objLocator.ConnectServer _
        (strComputer, "root\cimv2", strUser, strPassword)
    objWMI.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
    objWMI.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy

Else

    ' Connect using current user
    '
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

End If

' Get OS name
'
Set colOS = objWMI.InstancesOf ("Win32_OperatingSystem")

For Each objOS in colOS
    strName = objOS.Name
Next

If Instr(strName, "Windows 2000") > 0 Then

    '-------------------------------------------------------------------
    ' Code for Windows 2000
    '-------------------------------------------------------------------

    ' Get user name
    '
    Set colComputer = objWMI.ExecQuery("Select * from Win32_ComputerSystem")

    For Each objComputer in colComputer
        Wscript.Echo "User: " & objComputer.UserName
    Next

    ' ------------------------------------------------------------------

Else

    ' ------------------------------------------------------------------
    ' Code for Windows XP or later
    ' ------------------------------------------------------------------

    ' Get interactive session
    '
    Set colSessions = objWMI.ExecQuery _ 
          ("Select * from Win32_LogonSession Where LogonType = 2") 

    If colSessions.Count = 0 Then 
        ' No interactive session found
        '
        Wscript.Echo "No interactive user found" 
    Else 
        'Interactive session found
        '
        For Each objSession in colSessions 

            Set colList = objWMI.ExecQuery("Associators of " _ 
            & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _ 
            & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" ) 

            ' Show user info
            '
            For Each objItem in colList 
                WScript.Echo "User: " & objItem.Name 
                WScript.Echo "FullName: " & objItem.FullName 
                WScript.Echo "Domain: " & objItem.Domain 
            Next 

            ' Show session start time
            '
            Wscript.Echo "Start Time: " & objSession.StartTime 
        Next 
    End If 

    ' ------------------------------------------------------------------

End If

'=======================================================================

0

だれも、logonon2についてまだ誰も言及していないことに驚いています。logonon2は、かなり長い間使用しています。これは、要求されたGUI実装であり、ここから入手できます


これをWindows 7で実行すると、「エラー-終了しています」というエラーが表示されます。ServerBrowseDialogA0のエントリポイントが見つかりませんでした。おそらく、Win7では動作しませんか?エラーなしで実行するには管理者権限が必要ですか?
Steve

@Steve、これで誰も投稿しなかった理由がわかりました。その通り、Win 7では機能しません。少なくとも64ビットバージョンでは機能しません。XPマシンから必要なDLLをコピーして機能させることができるかどうかを確認します。成功した場合はお知らせします。
ジョンガーデニア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.