Достаточно часто на форумах возникает вопрос – “Как получить имя пользователя работающего в системе в данный момент?”. Такое может понадобится например если у нас есть сценарий обрабатывающий все включенные компьютеры, и ему нужно знать имя текущего пользователя.
Итак, какие есть решения… А решений вроде бы немало. Во-первых – psloggedon.exe, прекрасная утилита от Microsoft SysInternals с отличными возможностями… но не для нашей задачи. Лучшее что она может – вывести список учетных записей выполнивших вход. Интерактивных и нет. Пользовательских и служб…
PS C:\root> psloggedon -l -x
loggedon v1.33 - See who's logged on
Copyright й 2000-2006 Mark Russinovich
Sysinternals - www.sysinternals.com
Users logged on locally:
NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\NETWORK SERVICE
EURAZFIN\gusev
EURAZFIN\sa1
NT AUTHORITY\???????
А еще у неё какие то проблемы с юникодом…
Придётся поискать другой метод. И он достаточно легко находится. На vbscript – http://blogs.msdn.com/alejacma/archive/2008/03/04/how-to-get-the-logged-on-user-with-wmi-vbscript.aspx. Здорово да? А казалось бы, такая простая задачка… Но может быть дело не в задачке, а в языке?
Итак, решение на PowerShell. Сразу в виде удобной функции. По умолчанию получает текущего пользователя для локального компьютера, но можно указать и удалённый.
Function Get-LoggedOn ($Comp = $env:computername)
{
Get-WmiObject -computername $Comp -query `
"Select logonid from Win32_LogonSession where logontype = 2 or logontype = 10" |
foreach {Get-WmiObject -computername $Comp -query `
"Associators of {Win32_LogonSession.LogonId=$($_.logonid)} Where AssocClass=Win32_LoggedOnUser Role=Dependent"}
}
Фактически тут только 1-2 строчки. Остальное для читабельности и обёртка в функцию. Копипастим её в консоль (или сразу в файл профиля), и используем:
PS C:\root> Get-LoggedOn esprimo10
AccountType : 512
Caption : MYDOMAIN\gusev
Domain : MYDOMAIN
SID : S-1-5-21-445788029-8720151102-0124946612-1722
FullName : Гусев Василий
Name : gusev
Если вам нужны другие типы сессий, то вот тут есть полный список значений LogonType которые можно использовать в WMI запросе – http://msdn.microsoft.com/en-us/library/aa394189.aspx