コマンドラインからWindowsワークステーションに現在ログオンしているユーザーを確認するにはどうすればよいですか?


37

環境はドメイン内、サーバーはWindows Server 2003、ワークステーションにはVistaとXPがインストールされています。
ワークステーションに現在ログオンしているユーザーをリモートでチェックする方法が必要です。できれば、シンプルなコマンドラインから、sysinternalsまたはサードパーティのプログラムを使用しないでください。

ありがとう

回答:


47

これが元のソースでしたが、現在は404です。

彼らは、Windowsで利用可能な(Windows Management Interface Command)WMICの使用を提案しました:

WMIC /NODE: xxx.xxx.xxx.xxx COMPUTERSYSTEM GET USERNAME 

現在xxx.xxx.xxx.xxxにログインしているユーザー名を返します、または

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

現在「workstation_name」にログインしているユーザー名を返します

更新:これはWindows 10でも動作するはずです-リモートマシンの管理者である場合。


このコマンドをリモートまたはローカルで実行UserNameすると、そのマシンにログインしていても、他に何もリストされていない出力「」が1行だけ表示されます。

@Dai XPまたはVistaまたは2003を使用していますか?この質問は、それらのOSのためだった
プリートサンガ

17

申し訳ありませんが、Sysinternalsを使用しないことに気付きませんでした。
それは現在、Microsoft technetツールです。それを使用しない特別な理由はありますか?Mark Russinovichがマイクロソフトに移行する
前に、他のサードパーティツールよりもSysinternalsを優先しました。


マイクロソフトのSysinternals Suiteはと呼ばれるツールがあるPsloggedonを

psloggedon.exe -l

ありNBTSTAT

nbtstat -a NetBIOS-Computer-NAme

3
sysinternalsは単なるビジネスです。彼らがマークに多額のお金を払ってそこに行くことを願っています。現在、彼らは彼が前にやっていた良い仕事をするのを彼が止めなかったし、それが長く続くかもしれません。
gbjbaanb 09年

@gbjbaanb、私はそれについて幸せです。彼がスイートの更新と追加を続けることを願っています。
ニック

1
WMIC受け入れられた回答では、RPCが実行されていないと文句を言っていましたが、これは私にとっては驚異的でした。これは新しいワームの缶で、今は開けない気がするので、psloggedonにチェックインしました。とてもうれしいです。
マイクS

12

win32_loggedonuserを使用しましたが、複数のドメインユーザーが返されるという問題が発生したため、私の目的では機能しませんでした。代わりに(powershellで)を使用しました

#Get Currently logged in user
$ExplorerProcess = gwmi win32_process | where name -Match explorer

if($ExplorerProcess.getowner().user.count -gt 1){
    $LoggedOnUser = $ExplorerProcess.getowner().user[0]
}

else{
    $LoggedOnUser = $ExplorerProcess.getowner().user
}

ifは、getownerが何らかの理由で複数のユーザーを報告することがあるためです。理由はわかりませんが、私の場合は同じユーザーであるため問題ではありません。


2
その理由は、複数のユーザーがログインする可能性があるためです。ユーザーの高速切り替えなどは数年前に導入されました。I)tは、他のユーザーのログオンを保持します。
トムトム

グッドポイント@TomTom、私はそれを忘れていました、[win32_loggedonuser]はpsexec'dまたはpowershell'dの参加者も返すと思います。
MDMoore313

6

この情報はwin32_loggedonuserから取得できます。

このページから:

strComputer = "."   ' " use "." for local computer

Set objWMI = GetObject("winmgmts:" _
              & "{impersonationLevel=impersonate}!\\" _
              & strComputer & "\root\cimv2")

Set colSessions = objWMI.ExecQuery _
    ("Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10")

If colSessions.Count = 0 Then
   Wscript.Echo "No interactive users found"
Else
   For Each objSession in colSessions
     If objSession.LogonType = 2 Then
       WScript.Echo "Logon type: Console"
     Else
       WScript.Echo "Logon type: RDP/Terminal Server"
     End If
     Set colList = objWMI.ExecQuery("Associators of " _
         & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
         & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )

     For Each objItem in colList
       WScript.Echo "User: " & objItem.Name
       WScript.Echo "FullName: " & objItem.FullName
       WScript.Echo "Domain: " & objItem.Domain
     Next
     Wscript.Echo "Session start time: " & objSession.StartTime
     WScript.Echo
   Next
End If
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.