Войти

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


bredych
22-02-2018, 16:01
опять начал вспоминать батники.. тяжко..

имеем список машин, подключаемся к каждой последовательно, имя компа обозначается переменной %%i
Далее собсно запрашиваем список юзеров на машине, чтоб найти меня
for /f %%a in ('reg query \%%i\hku') do (
reg query "\%%i\%%a\Volatile Environment"
и если находящийся в этой ветке ключ username =myname,
то выполнить действие. Допустим, сменить дефолтную раскладку на англ для этого юзера.

собсно вопрос, как?

Казбек
22-02-2018, 18:10
REG QUERY "\%%i\%%a\Volatile Environment" /v Username |find "Myname" >nul
if not errorlevel 1 echo выполнить действие
echo выполнить действие - замените на желаемое действие

bredych
26-02-2018, 15:10
спасибо
Строку цикла for при таком разделителе уже не надо? Я что-то синтаксис не понял.

да, а почему переменную не подменяет именем машины?

В батнике
reg add "\%%i\HKEY_USERS\.DEFAULT\Keyboard Layout\Preload" /V 1 /T REG_SZ /F /D 00000409
В логе -
D:\Bats>reg add "\%i\HKEY_USERS\.DEFAULT\Keyboard Layout\Preload" /V 1 /T REG_SZ /F /D 00000409
ERROR: Invalid key name.
Type "REG ADD /?" for usage.
хотя в строке выше имя машины прекрасно ресолвится, и между этими строками нет отмены переменной
net use \\%1 /d
- оно ниже.

и в строке как вы описали, лог даёт -
D:\Bats>for /F %a in ('reg query \%i\hku') do (
REG QUERY "\%i\%a\Volatile Environment" /v Username | find "myname" 1>nul

if not errorlevel 1 reg add "\%i\%a\Keyboard Layout\Preload" /V 1 /T REG_SZ /F /D 00000409
)
ERROR: Invalid key name.
Type "REG QUERY /?" for usage.

bredych
28-02-2018, 14:31
а не может-ли тут влиять как-то недоступность разделов кроме HKCU & HKLM на удаленной машине?

Казбек
01-03-2018, 09:53
Попробуйте такой тестовый вариант с переменной:
@echo off
set file=c:\regcomplist.txt
for /f "Tokens=*" %%g in (%file%) do (
echo %%g>> c:\regquery.txt
reg query "\\%%g\HKU\Volatile Environment">> c:\regquery.txt
echo.>> c:\regquery.txt
echo.>> c:\regquery.txt
)
c:\regcomplist.txt - писок ваших ПК
Как отрабатывает??

Так же добавьте еще один слэш перед переменной и проверяйте:
REG QUERY "\\%%i\%%a\Volatile Environment" /v Username |find "Myname" >nul

bredych
01-03-2018, 17:55
c:\regcomplist.txt - писок ваших ПК
Как отрабатывает?? »
у нас в принципе по паролю доступ даёт, но аналогичный код выдаёт

%i


%i

добавьте еще один слэш перед переменной и проверяйте: »
D:\Bats>reg add "\\%i\HKU\.DEFAULT\Keyboard Layout\Preload" /V 1 /T REG_SZ
/D 00000409 /F
ERROR: The network path was not found.

D:\Bats>pause
Press any key to continue . . .

D:\Bats>for /F %a in ('reg query \\%i\hku') do (
REG QUERY "\\%i\%a\Volatile Environment" /v Username | find "myname" 1>nul

if not errorlevel 1 reg add "\\%i\%a\Keyboard Layout\Preload" /V 1 /T REG_SZ /D
00000409 /F
)
ERROR: The network path was not found.
...

D:\Bats>for /F %a in ('reg query \\%i\hku') do (
REG QUERY "\\%i\%a\Volatile Environment" /v Username | find "myname" 1>nul

if not errorlevel 1 reg add "\\%i\%a\Keyboard Layout\Preload" /V 1 /T REG_SZ /D
00000409 /F
)
ERROR: The network path was not found.

D:\bats\Bats>pause
Press any key to continue . . .

D:\bats\Bats>QUERY "\\%i\%a\Volatile Environment" /v Username | find "myname
" 1>nul
Invalid parameter(s)
QUERY { PROCESS | SESSION | TERMSERVER | USER }


апд


@echo ON

set DomainUser=kontora\myuser
set /P DomainPassword=password...
set FILELOG=%~n0.log
set PCLIST=AD3.txt
if exist %FILELOG% set PCLIST=%FILELOG%
for /f "tokens=*" %%i in (%FILELIST%) do call :ENGLISH %%i
goto RETURN


:ENGLISH

rem echo %%i>> D:\bats\regquery.txt
rem reg query "\\%%i\HKU\Volatile Environment">> D:\bats\regquery.txt
rem echo.>> D:\bats\regquery.txt
rem echo.>> D:\bats\regquery.txt


reg add "\\%%i\HKU\.DEFAULT\Keyboard Layout\Preload" /V 1 /T REG_SZ /D 00000409 /F
pause
for /f %%a in ('reg query \\%%i\hku') do ( REG QUERY "\\%%i\%%a\Volatile Environment" /v Username |find "myuser" >nul
if not errorlevel 1 reg add "\\%%i\%%a\Keyboard Layout\Preload" /V 1 /T REG_SZ /D 00000409 /F
)
pause


:return
ERROR: The network path was not found.
на каждую из 2х строку запросов




© OSzone.net 2001-2012