System.DirectoryServices.AccountManagement を使用して、特定の PC に現在ログインしているユーザーを見つけることは可能ですか?
PrincipalSearcher を使用すると、ドメイン上のすべてのコンピューターを簡単に見つけることができ、それらが最後にログインしたときでさえも見つけることができます。ただし、どの pc にログインしているユーザーのユーザー名を簡単に見つける方法が見つかりません。
これを行う方法についてのアイデアはありますか?
System.DirectoryServices.AccountManagement を使用して、特定の PC に現在ログインしているユーザーを見つけることは可能ですか?
PrincipalSearcher を使用すると、ドメイン上のすべてのコンピューターを簡単に見つけることができ、それらが最後にログインしたときでさえも見つけることができます。ただし、どの pc にログインしているユーザーのユーザー名を簡単に見つける方法が見つかりません。
これを行う方法についてのアイデアはありますか?
現在ログインしているユーザーを見つけるには、ユーザー アカウントから実行されているプロセスを知る必要があります。そのため、PC ごとにプロセスのリストを取得し、プロセスが実行されたアカウントを見つける必要があります。これを行うには、WMI を使用できます。
const string ns = @"root\cimv2";
var host = "your host";
var scope = new ManagementScope(string.Format(@"\\{0}\{1}", host, ns));
scope.Connect();
//List of logged in users
using (var searcher = new ManagementObjectSearcher(scope,
new ObjectQuery("select * from Win32_LoggedOnUser")))
{
foreach (var logonUser in searcher.Get())
{
//see MSDN for available properties of Win32_LoggedOnUser,
//take into consideration "Dependent", "Antecedent" properties
}
}
//list of processes
using (var searcher = new ManagementObjectSearcher(scope,
new ObjectQuery( "select * from Win32_SessionProcess")))
{
foreach (var sessProc in searcher.Get())
{
//see "Antecedent" property
}
}