Показать полную графическую версию : Удаление ветки реестра с плавающим именем
DarckSol
24-12-2015, 12:38
Доброго времени суток. Я видел много примеров решающих мою задачу, но не могу вникнуть, как использовать утилиту findstr.
Задача:
В ветке реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
существует плавающий SID с окончанием 1000, 1001, 1002, 1003, 1004, 100...*
Нужно получить имя SIDа с нужным окончанием и удалить его.
За ранее, спасибо за помощь!
greg zakharov
24-12-2015, 13:30
@echo off
setlocal enabledelayedexpansion
set key="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
set get="%key:"=%\%%i"
for /f "tokens=7 delims=\" %%i in (
'reg query %key% ^| findstr /irc:"s-[0-9]*"'
) do (
set "sid=%%i"
if "!sid:~-3,1!" neq "-" if "!sid:~-4,1!" neq "-" (
echo %get% % rem собственно, искомый[е] ключ[и] %
)
)
endlocal
exit /b
DarckSol
24-12-2015, 14:36
Не отрабатывает, находятся SIDы с неверным индификатором, или скрипт нужно было дополнить?
====================================================
Результат работы скрипта:
C:\Users\n7700-00681>@echo off
C:\Users\n7700-00681>setlocal enabledelayedexpansion
C:\Users\n7700-00681>set key="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
C:\Users\n7700-00681>set get="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%i"
C:\Users\n7700-00681>for /F "tokens=7 delims=\" %i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" | findstr /irc:"s-[0-1]*"') do (
set "sid=%i"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%i" )
)
C:\Users\n7700-00681>(
set "sid=S-1-5-18"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-18" )
)
C:\Users\n7700-00681>(
set "sid=S-1-5-19"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-19" )
)
C:\Users\n7700-00681>(
set "sid=S-1-5-20"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-20" )
)
C:\Users\n7700-00681>(
set "sid=S-1-5-21-116022207-583602576-2121419680-1346097.bak"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-116022207-583602576-2121419680-1346097.bak" )
)
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-116022207-583602576-2121419680-1346097.bak"
C:\Users\n7700-00681>(
set "sid=S-1-5-21-116022207-583602576-2121419680-1346626.bak"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-116022207-583602576-2121419680-1346626.bak" )
)
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-116022207-583602576-2121419680-1346626.bak"
C:\Users\n7700-00681>(
set "sid=S-1-5-21-116022207-583602576-2121419680-2218079"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-116022207-583602576-2121419680-2218079" )
)
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-116022207-583602576-2121419680-2218079"
C:\Users\n7700-00681>(
set "sid=S-1-5-21-3219155785-3520165716-3308996480-1000"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3219155785-3520165716-3308996480-1000" )
)
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3219155785-3520165716-3308996480-1000"
C:\Users\n7700-00681>(
set "sid=S-1-5-21-3219155785-3520165716-3308996480-1004"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3219155785-3520165716-3308996480-1004" )
)
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3219155785-3520165716-3308996480-1004"
C:\Users\n7700-00681>(
set "sid=S-1-5-21-3219155785-3520165716-3308996480-500"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3219155785-3520165716-3308996480-500" )
)
C:\Users\n7700-00681>(
set "sid=S-1-5-21-3908561691-2003391815-3342993206-42802"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3908561691-2003391815-3342993206-42802" )
)
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3908561691-2003391815-3342993206-42802"
C:\Users\n7700-00681>(
set "sid=S-1-5-21-3908561691-2003391815-3342993206-43404"
if "!sid:~-3,1!" NEQ "-" if "!sid:~-4,1!" NEQ "-" (echo "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3908561691-2003391815-3342993206-43404" )
)
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3908561691-2003391815-3342993206-43404"
C:\Users\n7700-00681>endlocal
C:\Users\n7700-00681>exit /b
Вру, в куче мусора нашёл вывод: "sid=S-1-5-21-3219155785-3520165716-3308996480-1004"
А как теперь его на удаление пристроить? На разных ПК, имена буду разные, кроме последних ЧЕТЫРЕХ цыфер...
То есть из мусора к удалению идут 2 записи:
1) S-1-5-21-3219155785-3520165716-3308996480-1004
2) S-1-5-21-3219155785-3520165716-3308996480-1000
как бы это реализовать?
Foreigner
24-12-2015, 16:11
DarckSol,
@echo off
setlocal
set "key=hklm\software\microsoft\windows nt\currentversion\profilelist"
for /f "tokens=*" %%i in ('" reg query "%key%" | findstr "S-1-5-21-.*1[0-9]*$" "') do echo reg delete %%i /f
DarckSol
28-12-2015, 10:49
C:\Documents and Settings\s1>reg delete /?
Программа редактирования системного реестра из командной строки, версия 3.0
(C) Корпорация Майкрософт, 1981-2001. Все права защищены
REG DELETE <раздел> [/v <параметр> | /ve | /va] [/f]
<раздел> Имя раздела в формате: [\\Компьютер\]Путь
<компьютер> Имя удаленного компьютера, если оно опущено, то по умолчанию
считается равным имени локального компьютера.
Для удаленных компьютеров доступны только HKLM и HKU.
<путь> Полный путь к разделу реестра в виде: КОРЕНЬ\Подраздел
<КОРЕНЬ> Корневой раздел. Значения: [ HKLM | HKCU | HKCR | HKU | HKCC ]
<подраздел> Полный путь к разделу реестра в выбранном корневом разделе.
<параметр> Имя удаляемого параметра в указанном разделе. Если опущено,
из указанного раздела будут удалены все подразделы и параметры.
/ve Удалять безымянные параметры.
/va Запрашивать все параметры данного раздела.
/f Удалять принудительно, без дополнительного предупреждения.
Примеры:
REG DELETE HKLM\Software\MyCo\MyApp\Timeout
собственно: <КОРЕНЬ> Корневой раздел. Значения: [ HKLM | HKCU | HKCR | HKU | HKCC ], а вывод поиска в виде:
C:\Documents and Settings\s1>"C:\Documents and Settings\s1\Рабочий стол\prof.bat"
reg delete HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion\profilelist\S-1-5-21-861567501-616249376-1417001333-1003 /f
Собственно, для выполнения команды удаления, нужно изменить синтаксис вывода на исполнение..., как это сделать?
--------------
ПС: И батник малость подправил на поиск нужного, а то он лишнее выводил...
for /f "tokens=*" %%i in ('" reg query "%key%" | findstr "S-1-5-21-.*-.*-.*-1[0-9]*$" "') d
DarckSol
29-12-2015, 12:12
Так поможет кто допилить скрипт?
DarckSol
11-01-2016, 09:44
не решено
Foreigner
11-01-2016, 14:32
DarckSol, А в чем вообще ваш вопрос?
То есть из мусора к удалению идут 2 записи »
Вы хотите удалить записи идентификаторов пользователей без удаления самих пользователей? Рисково аднака...
DarckSol
17-02-2016, 15:14
Вы хотите удалить записи идентификаторов пользователей без удаления самих пользователей? Рисково аднака... »
Не то что бы рисково, просто эти UIDы иногда мешают работе службы учетных записей, вот и пытаюсь массово вычистить скрипитом, не охота мне пользователе обходить и руками все лелать
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.