Регулярные выражения – Switch

regexp-8 Ну чтож, пора новогодних каникул давно закончилась, и мне стало уже тяжело находить отмазки на вопросы о продолжении серии 🙂 Так как времени с момента предыдущего поста прошло уже немало времени, да и для тех кто натолкнулся на этот пост случайно – вот ссылки на посты которые рекомендуется прочитать сначала: 1, 2, 3, 4, 5, 6, 7.

В последнем выпуске мы познакомились с Select-String, командлетом PowerShell который использует в своей работе регулярные выражения. Сегодня же мы рассмотрим конструкцию Switch, которая тоже может задействовать регекспы, и в результате становится вдвое полезнее 🙂

Читать далее…

Process Monitor – скринкаст

В прошлые выходные я наконец то закончил запись скринкаста про использование Process Monitor. Рассказал про основы использования, и несколько практических примеров 🙂

pm3

Отслеживание необходимых разрешений для кривых программ, требующих прав администратора без каких либо на то оснований.

Создание полного журнала загрузки системы, начиная с самого раннего этапа. Еще кстати по этой теме рекомендую этот пост.

Создание списка процессов запускаемых во время работы системы.

Подглядывание за простеньким трояном.

Автоматизация запуска Process Monitor’а.

pm2

Очень рекомендую посмотреть, надеюсь многие узнают что то новое и полезное 🙂

Process Monitor – мониторинг включения системы

Те кто серьезно занимались внедрением Software Restriction Policy у себя в компании, наверняка задумывались что неплохо было бы не оставлять включенным стандартное правило разрешающее запуск любых программ из папки Windows. Ведь некоторые из этих программ могут предоставлять чрезмерно большие возможности пользователям. А то и чем черт не шутит – дадут возможность обойти SRP… Но чтобы убрать это правило, надо понять, какие же программы действительно необходимы для загрузки системы и для работы пользователя. Для того чтобы это узнать, можно воспользоваться утилитой Process Monitor от Microsoft Sysinternals.

 

Читать далее…

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

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

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

Handle.exe или как разблокировать файл

Думаю нет среди моих читателей человека, который не сталкивался бы с проблемой файлов “залоченных” другими процессами. Ситуация вобщем то простая, и естественная – программа, для работы с файлом, открывает его с доступом на запись, или для монопольного чтения. Подробности наверное интерисуют лишь программистов, а нам важно понять что за процесс открыл этот файл, и как его освободить. Для этого я обычно использую утилиту от SysinternalsHandle.exe.

К примеру, захотелось мне удалить один файлик…

PS Q:\temp> del .\wlan-870isr.pdf
Remove-Item : Cannot remove item Q:\temp\wlan-870isr.pdf: 
The process cannot access the file 'Q:\temp\wlan-870isr.pdf'
because it is being used by another process.

Не очень приятная ситуация, особенно если удалить файл очень надо, а процесс который его открыл – неизвестен. Ничего страшного, просто скармливаем имя файла (или его часть) утилите:

PS Q:\temp> handle wlan-870isr.pdf

Handle v3.41
Copyright (C) 1997-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

AcroRd32.exe       pid: 3656    278: Q:\temp\wlan-870isr.pdf

Вот теперь нам известен виновник! Можно конечно просто завершить процесс Acrobat Reader’а, и все открытые им файлы будут освобождены:

PS Q:\temp> Stop-Process -Id 3656 -WhatIf
What if: Performing operation "Stop-Process" on Target "AcroRd32 (3656)".

Но что если мы не хотим завершать процесс, но при этом уверены что файл этой программе не нужен и она просто забыла его закрыть? Можно просто принудительно закрыть ссылку на файл (handle). Разумеется этого делать не рекомендуется если вы не уверены что всё кончится хорошо. Программа будет предполагать что файл всё еще открыт ею, и это может привести к неожиданным ошибкам. Но если очень хочется – то можно 😉

PS Q:\temp> handle -p 3656 -c 278

Handle v3.41
Copyright (C) 1997-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

  278: File  (---)   Q:\temp\wlan-870isr.pdf
Close handle 278 in AcroRd32.exe (PID 3656)? (y/n) y

Handle closed.

Вот и готово. После этого, Acrobat Reader даже дал мне полистать несколько страниц документа, правда потом выдал ожидаемую ошибку 🙂

image

Возможно вам повезет больше 😉 Иногда эта функция действительно бывает полезна.

Кстати чтобы handle.exe не переспрашивал вас, можно добавить ключ –y

Опубликовано в SysInternals. Метки: , , , . 4 комментария »