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

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

DarckSol 24-12-2015 12:38 2587971

Удаление ветки реестра с плавающим именем
 
Доброго времени суток. Я видел много примеров решающих мою задачу, но не могу вникнуть, как использовать утилиту 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 2587978

Код:

@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 2588001

Не отрабатывает, находятся 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 2588024

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 2589009

Цитата:

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 2589454

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

DarckSol 11-01-2016 09:44 2593342

не решено

Foreigner 11-01-2016 14:32 2593441

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

mwz 12-01-2016 01:10 2593696

Цитата:

Цитата DarckSol
То есть из мусора к удалению идут 2 записи »

Вы хотите удалить записи идентификаторов пользователей без удаления самих пользователей? Рисково аднака...

DarckSol 17-02-2016 15:14 2607051

Цитата:

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

Не то что бы рисково, просто эти UIDы иногда мешают работе службы учетных записей, вот и пытаюсь массово вычистить скрипитом, не охота мне пользователе обходить и руками все лелать


Время: 22:23.

Время: 22:23.
© OSzone.net 2001-