回答:
これが元のソースでしたが、現在は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でも動作するはずです-リモートマシンの管理者である場合。
申し訳ありませんが、Sysinternalsを使用しないことに気付きませんでした。
それは現在、Microsoft technetツールです。それを使用しない特別な理由はありますか?Mark Russinovichがマイクロソフトに移行する
前に、他のサードパーティツールよりもSysinternalsを優先しました。
マイクロソフトのSysinternals Suiteはと呼ばれるツールがあるPsloggedonを、
psloggedon.exe -l
ありNBTSTAT、
nbtstat -a NetBIOS-Computer-NAme
WMIC
受け入れられた回答では、RPCが実行されていないと文句を言っていましたが、これは私にとっては驚異的でした。これは新しいワームの缶で、今は開けない気がするので、psloggedonにチェックインしました。とてもうれしいです。
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が何らかの理由で複数のユーザーを報告することがあるためです。理由はわかりませんが、私の場合は同じユーザーであるため問題ではありません。
この情報は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
UserName
すると、そのマシンにログインしていても、他に何もリストされていない出力「」が1行だけ表示されます。