Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удаление ветки реестра с плавающим именем

Ответить
Настройки темы
CMD/BAT - Удаление ветки реестра с плавающим именем

Пользователь


Сообщения: 50
Благодарности: 1

Профиль | Отправить PM | Цитировать


Доброго времени суток. Я видел много примеров решающих мою задачу, но не могу вникнуть, как использовать утилиту findstr.
Задача:
В ветке реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
существует плавающий SID с окончанием 1000, 1001, 1002, 1003, 1004, 100...*
Нужно получить имя SIDа с нужным окончанием и удалить его.
За ранее, спасибо за помощь!

Отправлено: 12:38, 24-12-2015

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Код: Выделить весь код
@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

Отправлено: 13:30, 24-12-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 50
Благодарности: 1

Профиль | Отправить PM | Цитировать


Не отрабатывает, находятся 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
как бы это реализовать?

Последний раз редактировалось DarckSol, 24-12-2015 в 14:46.


Отправлено: 14:36, 24-12-2015 | #3


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:11, 24-12-2015 | #4


Пользователь


Сообщения: 50
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата:
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, 28-12-2015 в 11:27.


Отправлено: 10:49, 28-12-2015 | #5


Пользователь


Сообщения: 50
Благодарности: 1

Профиль | Отправить PM | Цитировать


Так поможет кто допилить скрипт?

Отправлено: 12:12, 29-12-2015 | #6


Пользователь


Сообщения: 50
Благодарности: 1

Профиль | Отправить PM | Цитировать


не решено

Отправлено: 09:44, 11-01-2016 | #7


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


DarckSol, А в чем вообще ваш вопрос?

Отправлено: 14:32, 11-01-2016 | #8

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата DarckSol:
То есть из мусора к удалению идут 2 записи »
Вы хотите удалить записи идентификаторов пользователей без удаления самих пользователей? Рисково аднака...

-------
Mikhail Zhilin


Отправлено: 01:10, 12-01-2016 | #9


Пользователь


Сообщения: 50
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата mwz:
Вы хотите удалить записи идентификаторов пользователей без удаления самих пользователей? Рисково аднака... »
Не то что бы рисково, просто эти UIDы иногда мешают работе службы учетных записей, вот и пытаюсь массово вычистить скрипитом, не охота мне пользователе обходить и руками все лелать

Отправлено: 15:14, 17-02-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удаление ветки реестра с плавающим именем

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Скрипт vbs для удаления ветки реестра angel_lyucifer Скриптовые языки администрирования Windows 12 25-11-2015 18:32
[решено] Завершить процесс с плавающим именем HFShak AutoIt 1 06-09-2012 15:58
экспорт ветки реестра фотошопа koss Хочу все знать 6 03-07-2010 23:39
Права на ветки реестра. FerFel Microsoft Windows NT/2000/2003 10 25-01-2010 19:44
разрешения на ветки реестра maxtravilov Автоматическая установка Windows 2000/XP/2003 1 27-10-2005 21:44




 
Переход