PDA

Показать полную графическую версию : [решено] Вывод путей профилей пользователей компьютера


Страниц : [1] 2

Sub-Zero
24-06-2019, 15:25
Приветствую! Есть скрипт который выводит пути всех профилей пользователей компьютера, но выводит их с пропусками строк, поскольку сама команда reg query делает эти пустые строки. Можно ли их как-то убрать. Сам не осилил :)
@echo off
for /f "usebackq tokens=2* delims= " %%i in (`reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /s /v "ProfileImagePath"`) do echo.%%j
pause

alpap
24-06-2019, 15:57
@echo off
for /f "tokens=2*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /s /v "ProfileImagePath"^|findstr /rc:"^[ ][ ]*"') do echo.%%j
pause

Sub-Zero
24-06-2019, 16:10
Спасибо огромное!!! :yahoo:

greg zakharov
24-06-2019, 20:07
alpap, то же, но с малым количеством телодвижений:
wmic path win32_userprofile get localpath | findstr /vric:"localpath"

Iska
25-06-2019, 01:52
greg zakharov, для чистоты количество телодвижений таки нужно будет увеличить двойным разбором.

Vadikan
25-06-2019, 08:57
Зачем все эти findstr с двойным разбором, если можно просто выводить значения параметров пошиком?
dir "HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" | %{$_.GetValue('ProfileImagePath')}

greg zakharov
25-06-2019, 09:02
Iska, не нужно. Понятие профиля включает в себя не только наличие папки пользователя на диске, но и определенные роли и олицетворения. Так, например, AllUsers в реестре наряду с некоторыми другими значениями едва ли можно отнести к пользовательским профилям. Win32_UserProfile об этом знает и потому возвращает именно профили без каких-либо рудиментарных значений. Кстати, в logon session также далеко не все можно отнести к понятию профиля.

Iska
25-06-2019, 17:19
greg zakharov, Вы о чём-то другом. Я об этом:
https://i.imgur.com/QsGWGLV.png

Vadikan, тогда уж и брать не реестр, а Wbem, как указал коллега greg zakharov.

greg zakharov
25-06-2019, 17:46
Iska, баг Far'а должен сообщить по вашему о чем-то сакральном?

YuS_2
25-06-2019, 18:27
баг Far'а должен сообщить по вашему о чем-то сакральном? »
Это не баг Far-а, это таки баг wmic (вернее даже пары wmic|findstr), там лишние символы перевода каретки "\r" (0x0D), да и кучка конечных пробелов тоже не добавляет дополнительного ощущения счастья. :)

greg zakharov
25-06-2019, 18:44
YuS_2, увы нет. Во-первых, такого у wmic не наблюдаю ни в одной из систем, к которым у меня имеется доступ, во-вторых, это не похоже на символ возврата каретки, скорее попытка вернуть буфер целиком (к слову, неплохой вектор для атаки).

YuS_2
25-06-2019, 19:11
Во-первых, такого у wmic не наблюдаю ни в одной из систем »
отдельно у wmic - нет, у findstr - тоже нет, а вот именно в таком сочетании:
wmic path win32_userprofile get localpath | findstr /vric:"localpath" >out.txt
http://ipic.su/img/img7/fs/Snimokekrana20190625221031.1561479062.png

Iska
25-06-2019, 22:04
greg zakharov, так выглядит результат автоперевода перевода из юникод-вывода wmic.exe в OEM при подобных перенаправлениях. Всегда было так.

Vadikan
26-06-2019, 11:48
Vadikan, тогда уж и брать не реестр, а Wbem, как указал коллега greg zakharov. »
Почему? Обе команды выводят одни и те же пути, только в моем варианте без лишнего перевода каретки и прочего мусора.
Ах да, еще в моем варианте кириллическое название учетной записи в консоли читается, в отличие от знаков вопроса с wmic/findstr (не тратьте время на объяснения, как с этим справляться).

Sub-Zero
26-06-2019, 13:26
Коллеги, помогите пожалуйста еще с одним действом... Все по той же теме:
for /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /s /v "ProfileImagePath"^|findstr /rc:"^[ ][ ]*"') do (
for /d /r "%b%\AppData\Roaming\1C" %%e in (*) do (for %%k in (vrs-cache SICache Config ConfigSave DBNameCache) do (if /i %%~nxe==%%~k rd /s /q %%e))
)
Подчеркнутая часть не работает. Я так понимаю что новая конструкция for не видит переменную из прежнего цикла.

greg zakharov
26-06-2019, 13:47
Vadikan, а что, собственно, там объяснять? Если консоль правильно нстроена на вывод юникода, никаких вопросов пользователь не увидит.
Iska, не, дело не в переводе из одной кодировки в другую, а в бажных функциях форматирования вывода у wmic. Жаль, что правила форума не позволяют мне выложить пару РоС по теме.

Ageron
26-06-2019, 17:14
"%b%\AppData\Roaming\1C" »
наверное так переменная указывается %%b

но из прежнего цикла вижу только %%a

Vadikan
26-06-2019, 19:48
Vadikan, а что, собственно, там объяснять? Если консоль правильно нстроена на вывод юникода, никаких вопросов пользователь не увидит. »
Вот именно, что в варианте с пошиком объяснять ничего не надо вообще.

greg zakharov
26-06-2019, 22:16
Вот именно, что в варианте с пошиком объяснять ничего не надо вообще.Смотря о каком именно варианте идет речь, ибо если написать:
(gp HKLM:\SO*\M*\W*\C*\ProfileList\*).ProfileImagePath
это так же сработает, но, во-первых, далеко не во всех версиях, во-вторых, придется разъяснить человеку несведущему как оно работает и отчего нескольким медленней, нежели ожидается. Про кодировки там и вовсе тема отдельной книги, а конструкции в стиле brainfuck - это для многих попросту непостижимая наука. - Подобного рода полемика алогична, не находите? Проще и короче в pwsh будет решение вида:
(Get-CimInstance Win32_UserProfile).LocalPath

Iska
27-06-2019, 04:29
Почему? »
Vadikan, это старая история: Блог GunSmoker-а (переводы): Длинная и печальная история ключа Shell Folders (https://www.transl-gunsmoker.ru/2008/12/shell-folders.html)/The long and sad story of the Shell Folders key | The Old New Thing (https://devblogs.microsoft.com/oldnewthing/?p=41973). Microsoft рекомендует пользовать для этого дела WinAPI. В нашем случае мы можем опосредованно пользовать его посредством Wbem. Если бы было уже ну совсем никак, а токмо через реестр — тогда ладно, я бы согласился.

Ах да, еще в моем варианте кириллическое название учетной записи в консоли читается, в отличие от знаков вопроса с wmic/findstr »
Вот этого не понял. У меня вроде как нормально:
https://i.imgur.com/IvVyw14.png
Ну, да ладно.




© OSzone.net 2001-2012