Запустите сценарий для каждого SID, который вошел в компьютер (пакетный сценарий).

Итак, я пытаюсь зайти в реестр и удалить все перечисленные ключи HKCU. Я настроил его на удаление всех ключей для SID указанного пользователя, однако я хотел бы автоматизировать его и удалить ключи для всех пользователей. Сценарий должен запускаться от имени администратора, и из-за обновления Windows примерно год назад мне нужно запускать этот сценарий примерно раз в месяц, чтобы предотвратить необходимость предоставления прав администратора для каждого затронутого пользователя.

@ECHO off
SET /p SID=Type in user's SID:
ECHO User SID:%SID% > LOG.txt
REG DELETE HKEY_USERS\%SID%\Software\Microsoft\Installer\Products\452033ab5697de740950c3bbe5df23ab /f >> LOG.txt 2>&1
REG DELETE HKEY_USERS\%SID%\Software\Microsoft\Installer\Products\48a13d91454582b4faf744a91b0c2c9b /f >> LOG.txt 2>&1
REG DELETE HKEY_USERS\%SID%\Software\Microsoft\Installer\Products\9c3c61d27303d6049a12e160ccfbc300 /f >> LOG.txt 2>&1
REG DELETE HKEY_USERS\%SID%\Software\Microsoft\Installer\Products\aa7f2c2a1b079f34488e76ab87eeac10 /f >> LOG.txt 2>&1
REG DELETE HKEY_USERS\%SID%\Software\Microsoft\Installer\Products\b298dde705552b440ae8d40b79981a81 /f >> LOG.txt 2>&1
REG DELETE HKEY_USERS\%SID%\Software\Microsoft\Installer\Products\ca3d13757e7568c4da4a745d1c7c6faa /f >> LOG.txt 2>&1
Exit

Я нашел сценарий для захвата каждого пользователя в активном каталоге.... но с нашей фирмой это намного дольше, чем делать это на компьютерах с отдельными пользователями или общими для 5 или менее лица.

Я знаю, что ключ реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Имеет список всех SID, но я не уверен, как использовать каждое имя подраздела в качестве переменной, а затем запускать (возможно, цикл) с каждой переменной по очереди.


person Pyrometheous    schedule 17.03.2016    source источник


Ответы (1)


 for /f "tokens=3*" %A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /f ProfileImagePath /s^|findstr /v /i /c:"(es)"') do Echo your command on %A%B

Циклы for предназначены для разбора выходных данных команд.

Используйте %%A в пакетном файле (я использовал %A для интерактивного ввода, чтобы вы могли вставить его в командную строку)

Используйте %A%B, так как это будет обрабатывать пути с пробелами.

Побег из трубы (|) с помощью каретки (^)

Findstr удаляет последнюю строку (количество найденных совпадений)

См. for /?, reg /? и reg query /?, и findstr /?.

ИЛИ попросите системного администратора настроить Windows так, чтобы сохранялось только x профилей или вообще не хранились перемещаемые профили пользователей.

person Community    schedule 17.03.2016
comment
Я не совсем уверен, что понимаю. Может быть, я просто устал, но я немного повозился с ним, и он продолжает падать сразу после запуска. Пробовал делать паузы, но все равно не получается. - person Pyrometheous; 18.03.2016