Используем PowerShell для получения информации о профиле пользователя

Windows
Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает о том, как получить информацию о пользовательском профиле посредством Windows PowerShell.

Получаем информацию о профиле


Для того, чтобы получить информацию о профиле, нам необходимо запросить класс WMI Win32_UserProfile. Для этого я воспользуюсь командлетом Get-WmiObject (gwmi – его алиас).

gwmi win32_userprofile

Команда и ее вывод приведены на рисунке.



Вывод по умолчанию содержит множество ненужной мне в данный момент информации. Что мне сейчас нужно, так это свойства LastUseTime, LocalPath и SID. Слегка измененный запрос приведен ниже.

gwmi win32_userprofile | select lastusetime, localpath, sid



Однако, мне кажется, стоит внести еще некоторые изменения для более удобного представления информации. Кроме того, мне не интересны профили, которые не используются. В Windows PowerShell 3.0 командлет Get-CimInstance конвертирует время в формат DateTime. Это еще немного приближает меня к нужному результату.

get-ciminstance win32_userprofile | ? lastusetime | select lastusetime, localpath, sid




Транслируем SID в имя пользователя


Теперь мне нужно перевести SID в имя пользователя. Для этого существует несколько способов, и один из них – это использование класса WMI Win32_UserAccount.

Как это работает? Кроме свойства Name, класс Win32_UserAccount содержит свойство SID. Также он включает в себя свойство Caption, в котором содержится как имя пользователя, так и имя домена. Вот пара примеров.

PS C:\> (gwmi win32_useraccount -Filter «sid = ‘S-1-5-21-1457956834-3844189528-3541350385-1613′»).name
Tim O’Brian
PS C:\> (gwmi win32_useraccount -Filter «sid = ‘S-1-5-21-1457956834-3844189528-3541350385-1613′»).Caption
IAMMRED\Tim O’Brian
PS C:\>

Теперь все что мне осталось сделать – это создать пользовательское свойство для моего пользовательского объекта.

Создаем пользовательское свойство с нужной информацией


Мне нужно создать пользовательский объект со свойствами LastUseTime, LocalPath и именем пользователя. Для этого я воспользуюсь командлетом Select-Object. Я выберу свойства LastUseTime и LocalPath. Затем я использую хеш-таблицу, чтобы получить имя пользователя по его SID. Вот это хеш-таблица.

@{LABEL=’user’;EXPRESSION={(gwmi win32_useraccount -filter «SID = ‘$($_.sid)'»).caption}}


В выражении EXPRESSION я запрашиваю класс Win32_UserAccount. В качестве фильтра я указываю Sid = ‘$($_.sid)’. Я использую подвыражение, чтобы использовать для сравнения значение свойства. Поскольку запрос возвращает объект пользовательской учетной записи, а мне нужно только значение свойства Caption, я помещаю все выражение в скобки и выбираю только Caption. Полная команда приведена ниже.

get-ciminstance win32_userprofile | ? lastusetime |
select lastusetime, localpath,
@{LABEL=’user’;EXPRESSION={(gwmi win32_useraccount -filter «SID = ‘$($_.sid)'»).caption}}



Автор:
Ed Wilson, Microsoft Scripting Guy

Оригинал:
http://blogs.technet.com/b/heyscriptingguy/archive/2013/03/04/use-powershell-to-find-detailed-windows-profile-information.aspx
Оригинал перевода:
https://sergeyvasin.wordpress.com/2013/04/09/use-powershell-to-find-detailed-windows-profile-information/

0 комментариев

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