Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] как вычислить SID юзера и использовать его при добавлении в реестре? (http://forum.oszone.net/showthread.php?t=173591)

SvoiLudi 20-04-2010 01:56 1396593

как вычислить SID юзера и использовать его при добавлении в реестре?
 
Кроме того, много надо будет загонять:

[HKEY_USERS\S-1-5-21-2784700513-3056928466-3982877403-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}"="v:\\Библиотеки с Windows 7 и новее"


можно-ли вычислить SID юзера и использовать его в качестве переменной в reg-файле? или нужно будет добавлять командой из cmd-файла?

на другом форуме нашёл что-то, но ругается на НЕПРЕДВИДЕННОЕ ПОЯВЛЕНИЕ: %%a. что не так? где его применять?


Цитата:

Есть утилита psGetSid.exe, входящая в состав пакета PS Tools, Марка Руссиновича. Она находит SID юзера, вошедшего в систему. Вот такой строкой из командного файла, можно получить SID в переменной %%a:
Код:

for /f "usebackq tokens=*" %%a in (`"psgetsid | find "S-""`) do echo %%a
где здесь конец строки и где начало? сколько строк здесь?

SvoiLudi 20-04-2010 10:28 1396715

МОЖЕТ БЫТЬ С ПОМОЩЬЮ PowerShell? Понимает ли он написанное в cmd?

El Sanchez 20-04-2010 12:48 1396790

SvoiLudi,

Код:

@Echo Off

Set /P "ProfileName=Введите имя профиля пользователя: "
For /F "Tokens=7 Delims=\" %%A In ('REG QUERY "HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList" /s^|Find "S-"') Do (
        REG QUERY "HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\%%A" /v ProfileImagePath|Find /I "%ProfileName%" >nul&&Call :Func %%A&&GoTo :EOF
)
Echo Профиль пользователя %ProfileName% не найден.
GoTo :EOF

:Func
:: Здесь пишем свои команды, SID передается в качестве параметра %1. Пример команды ниже
Echo Профиль пользователя %ProfileName% найден, его SID - %1


amel27 20-04-2010 13:03 1396806

Цитата:

Цитата SvoiLudi
можно-ли вычислить SID юзера и использовать его в качестве переменной в reg-файле? или нужно будет добавлять командой из cmd-файла? »

как вариант - использовать вместо REG-файла INF-файл:
Код:

[Version]
Signature="$Windows NT$"

[DefaultInstall]
AddReg = HKU.AddReg

[HKU.AddReg]
HKU,"%SID1%\%ShellFolders%","My Video",,"v:\Мои видеозаписи"

[Strings]
ShellFolders=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

одноименный батник создает временную копию INF, добавляет в конец SID и запускает на выполнение:
Код:

Copy /V /Y "%~dpns0.inf" "%TEMP%\%~ns0.inf"
Echo SID1=S-1-5-21-116022207-583602576-2121419680-108623>>"%TEMP%\%~ns0.inf"
rundll32 setupapi,InstallHinfSection DefaultInstall 128 %TEMP%\%~ns0.inf


SvoiLudi 20-04-2010 16:09 1396979

amel27, не совсем понял, зачем делать копию? единственная гипотеза - для каждого пользователя.

El Sanchez, спасибо за помощь, всю ночь голову ломал. Упростил для текущего пользователя. Но теперь как добавить в реестр из коммандного файла?

amel27 20-04-2010 16:24 1396994

Цитата:

Цитата SvoiLudi
не совсем понял, зачем делать копию? »

на случай многократного использования INF, т.е. для запуска с любыми параметрами (любым SID), можно оформить как процедуру или передавать SID в батник как параметр (%1), для каждого из которых требуется применение параметров, прописанных в INF-файле

SvoiLudi 20-04-2010 16:58 1397014

будет только 1 пользователь

El Sanchez 22-04-2010 23:48 1398904

Цитата:

Цитата SvoiLudi
Но теперь как добавить в реестр из коммандного файла? »

SvoiLudi,

Если использовать мой скрипт, то...
Код:

...
:Func
Set RegPath="HKEY_USERS\%1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
Reg Add %RegPath% /v "{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}" /d "v:\Библиотеки с Windows 7 и новее" /f 1>nul 2>&1
Reg Add %RegPath% /v "My Video" /d "v:\Мои видеозаписи" /f 1>nul 2>&1
Reg Add %RegPath% /v "{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}" /d "v:\Сохраненные стандартные игры от Майкрософт" /f 1>nul 2>&1
и т.д.

Set RegPath="HKEY_USERS\%1\Software\Microsoft\MediaPlayer\Preferences"
Reg Add %RegPath% /v "TrackFoldersDirectories5" /d "v:\Общие\Общедоступные ТВ-записи" /f 1>nul 2>&1
и т.д.

... и почитать справку reg add /?

Для способа с INF-файлом от amel27 добавить строки в секции [HKU.AddReg]
Код:

HKU,"%SID1%\%ShellFolders%","My Video",,"v:\Мои видеозаписи"
HKU,"%SID1%\%ShellFolders%","My Pictures",,"v:\Изображения"
и т.д.

HKU,"%SID1%\%Preferences%","TrackFoldersDirectories2",,"v:\Мои видеозаписи"
HKU,"%SID1%\%Preferences%","TrackFoldersDirectories3",,"v:\Общие\Общая музыка"
и т.д.

, добавить строки в секции [Strings]
Код:

ShellFolders=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Preferences=Software\Microsoft\MediaPlayer\Preferences
LastSharedFolders=Software\Microsoft\MediaPlayer\Preferences\HME\LastSharedFolders
и т.д.

... и почитать статью про INF-файлы

deps 16-06-2010 12:36 1435188

ещё можно так:
когда нужно добавить очень много строк, которые экспортированы из реестра в reg файл, то проще использовать reg import %имяФайла%


Код:

@Echo Off

rem Set /P "ProfileName=Введите имя профиля пользователя: "
set ProfileName=%username%
For /F "Tokens=7 Delims=\" %%A In ('REG QUERY "HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList" /s^|Find "S-"') Do (
        REG QUERY "HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\%%A" /v ProfileImagePath|Find /I "%ProfileName%" >nul&&Call :Func %%A&&GoTo :EOF
)
Echo Профиль пользователя %ProfileName% не найден.


GoTo :EOF

:Func
:: Здесь пишем свои команды, SID передается в качестве параметра %1. Пример команды ниже
Echo Профиль пользователя %ProfileName% найден, его SID - %1

ECHO        Windows Registry Editor Version 5.00        > %temp%\BetaClock.reg
ECHO.                >> %temp%\BetaClock.reg
ECHO        [HKEY_USERS\%1\Software\BetaClock]        >> %temp%\BetaClock.reg
ECHO.                >> %temp%\BetaClock.reg
ECHO        [HKEY_USERS\%1\Software\BetaClock\CalendarSchema]        >> %temp%\BetaClock.reg
ECHO        "Unsaved"=dword:00000000        >> %temp%\BetaClock.reg
ECHO        "CurrentElementName"="LV"        >> %temp%\BetaClock.reg
ECHO.                >> %temp%\BetaClock.reg
ECHO        [HKEY_USERS\%1\Software\BetaClock\CalendarSchema\SchemaElements]        >> %temp%\BetaClock.reg
ECHO        "Count"=dword:00000001        >> %temp%\BetaClock.reg
ECHO        "0"="LV"        >> %temp%\BetaClock.reg
ECHO.                >> %temp%\BetaClock.reg



echo reg file import
reg import %temp%\BetaClock.reg



echo del tem reg file

del %temp%\BetaClock.reg /Q /F


MioZo 21-03-2011 15:09 1640167

Может кто знает аналогичное решение средствами VBS?


Время: 20:13.

Время: 20:13.
© OSzone.net 2001-