как вычислить 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
где здесь конец строки и где начало? сколько строк здесь?
|
МОЖЕТ БЫТЬ С ПОМОЩЬЮ 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
|
Цитата:
Цитата 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
|
amel27, не совсем понял, зачем делать копию? единственная гипотеза - для каждого пользователя.
El Sanchez, спасибо за помощь, всю ночь голову ломал. Упростил для текущего пользователя. Но теперь как добавить в реестр из коммандного файла?
|
Цитата:
Цитата SvoiLudi
не совсем понял, зачем делать копию? »
|
на случай многократного использования INF, т.е. для запуска с любыми параметрами (любым SID), можно оформить как процедуру или передавать SID в батник как параметр (%1), для каждого из которых требуется применение параметров, прописанных в INF-файле
|
будет только 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-файлы
|
ещё можно так:
когда нужно добавить очень много строк, которые экспортированы из реестра в 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
|
Может кто знает аналогичное решение средствами VBS?
|
Время: 20:13.
© OSzone.net 2001-