Scripting Games 2009, Advanced Events 4, 5, 6

Продолжаю публиковать свои решения задачек Scripting Games из категории Advanced:

Event 4:

Я решил не заниматься автоматизацией MS Office, при наличии нормальных альтернатив, пока эти нехорошие люди не пофиксят багу с автоматизацией при работе с региональными настройками отличными от En-Us :) Так что решение создаёт форму и рисует на ней графики с использованием .Net:

Прочтите эту запись до конца »

Scripting Games 2009, Advanced Events 1, 2, 3

Scripting Games 2009 еще не начались, но первые вопросы уже публикуются. Учитывая что на этот раз соревнования “кто решит раньше не подглядывая” нет, то можно публиковать и решения. Это сделано из за того основной смысл этих игр не победа, а участие :) Ведь главное получить удовольствие и научиться чему то новому. И если вы позаимствуете красивый элемент у другого участника – это только к лучшему :)

Итак, мои решения первых задачек из категории Advanced :)

Прочтите эту запись до конца »

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

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

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

Делимся своими профилями!

Hal Rottenber предложил отличную идею – поделиться своими профилями, сам же и начал – http://halr9000.com/article/723. Мысль просто превосходная – нечего скрывать свои знания, лучше поделитесь с другими! :) Авось и для себя чего то найдете нового :) Еще ссылки на профили в комментариях к посту.

Короче говоря присоединяйтесь. Вот мой профиль – http://posh.jaykul.com/p/2029.

На всякий случай еще и сюда скопипастю с комментариями на русском :)

Прочтите эту запись до конца »

Опубликовано в PowerShell. Метки: , , . Комментарии (2) »