Текущий “залогиненный” пользователь

Достаточно часто на форумах возникает вопрос – “Как получить имя пользователя работающего в системе в данный момент?”. Такое может понадобится например если у нас есть сценарий обрабатывающий все включенные компьютеры, и ему нужно знать имя текущего пользователя.

Итак, какие есть решения… А решений вроде бы немало. Во-первых – 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

Реклама
Опубликовано в Uncategorized. Метки: , , . 25 комментариев »

Простенькая инвентаризация ПО на компьютерах

Захотелось тут одному начинающему “автоматизатору” получить данные об установленном на компьютерах сети программном обеспечении, для последующей обработке в Excel 🙂

Если для получения списка компьютеров применить Quest AD Cmdlets, а для проверки их доступности Where-Online то всё будет очень просто 🙂

Function Get-ComputerSoftware ($Name = "*")            
{            
    foreach ($comp in (Get-QADComputer $Name | foreach {$_.dnsname} | Where-Online))            
    {            
        Write-Host "Enumerating software for $comp...`t" -NoNewline            
        Get-WmiObject win32_product -ComputerName $comp | select name, vendor, version, @{name="Computer"; expression={$Comp}}            
        Write-Host "Done"            
    }            
}            
            
Get-ComputerSoftware -Name "Scenic*" | Export-Csv -Encoding "Unicode" -Path "c:\Report.csv"