Используйте список учетных записей Windows для добавления ключей reg с помощью SIDS - PullRequest
0 голосов
/ 24 марта 2019

изменить объяснение, чтобы улучшить ответы.

Проект

Как сторонний инженер, я посещаю сайт по установке части Программного обеспечения.Инфраструктура "очень" заблокирована.Мне будет предоставлена ​​учетная запись администратора на день установки программного обеспечения.Однако, чтобы заставить программное обеспечение работать должным образом ДЛЯ ВСЕХ ПОЛЬЗОВАТЕЛЕЙ (не только для входа в систему администратора), я был проинструктирован ИТ-отделом.вручную создать ключ и затем добавить строковое значение в созданный ключ для каждой учетной записи пользователя на ПК.Наше программное обеспечение в стандартной среде обслуживает это с помощью ключа reg для всех пользователей, но оно не запускается (не разрешается - не спрашивайте!) В этих конкретных местах.

Место, где они хотятKEY находится в пути HKEY_USERS в регистре: -

HKEY_USERS \ S-1-5-21-XXXXXXXXX-XXXXXXXXX-XXXXXXXXXX-XXXXX \ Software \ Microsoft \

, скажем, 2 человекавошли в систему на этом ПК, и им нужно использовать наше программное обеспечение позже

john.jones

mary.shelley

Мне нужно найти sid, относящийся к Джону Джонсу, и пойти идобавить ключ к его разделу в HKEY_USERS

Затем мне нужно найти sid mary.shelley, а затем перейти и ключ к ее разделу HKEY_USERS и т. д.

Теперь я знаю, из каких сред я работаютам может быть более 20 учетных записей пользователей, поэтому очень хотелось бы избегать ручного добавления их ключей снова и снова для всех учетных записей на каждом компьютере, на котором я устанавливаю.

Сценарий входа в систему будет лучше, но это все, с чем мне приходится иметь дело в настоящее время.

Состояние сценария сейчас

@echo off
REM Read file with user names
FOR /F "usebackq tokens=*" %%G in ("users.txt") do (
    REM use user name to find SID
    FOR /F "delims=" %%H IN ('"wmic useraccount where name='%%~G' get sid| findstr /vi "SID""') DO (
        REM Strip trailing line with CR
        FOR /F "delims= " %%I IN ("%%~H") DO (
            REM %%I is now the SID of the USER
            REG ADD "HKEY_USERS\%%I\Software\Microsoft\addstuffhere" /f
            REG ADD "HKEY_USERS\%%I\Software\Microsoft\addstuffhere" /t REG_SZ /d "addstuffhere"" /f
        )
    )
)

Это в значительной степени автоматизирует все как запланировано;циклически просматривает текстовый файл с именами пользователей пользователей, которые используют ПК, захватывает SID, применяет sid в качестве переменной, затем используется для записи ключа в нужном месте для этого пользователя и далее по списку делает то же самое для каждой учетной записив списке.

Единственная часть, которая может нуждаться в изменении, - это раздел WMIC, который не находит определенных пользователей, имеющих подлинные учетные записи Windows.

, когда я тестировал рабочий код на своем ноутбуке, он отлично работал для моего администратораучетная запись, но я вошел в систему как joe_blogs (например) придумал "экземпляр не доступен".Поскольку в отдельности код WMIC просто вызывал не всех, а несколько, поэтому он не мог сделать то, что ему нужно было сделать.

Я знаю из предыдущих вопросов, этот код WMIC поднимает каждую учетную запись: -

WMIC Path Win32_UserProfile Where "Special='False' And Not LocalPath='Null'" Get LocalPath,SID | find /v ""

Возможно, это можно включить в текущий рабочий код, чтобы обеспечить обслуживание каждой учетной записи.

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

- надеюсь, это действительно объясняет это: /

отредактируйте инструкции к тому, что меня попросили сделать (слегка изменили имена ключей для конфиденциальности)

1. Log on to the PC with a standard technician admin account
2. Open regedit.exe
3. Navigate to* HKEY_USERS\S-1-5-21-XXXXXXXXX-XXXXXXXXX-XXXXXXXXXX-     XXXXX\Software\Microsoft\Terminal Server Client\Default\Addins\
a. Right-click Addins > New > Key and create foo
b. Right-click foo > New > String Value and create Name
c. Double-click Name and in Value Data enter† C:\foo\file\foo.dll
4. Repeat step 3 for each user: it should be possible to edit the SID in an exported key by right-clicking on the next 
HKEY_USERS entry > Rename > Ctrl+C > Esc then replacing the SID in the exported reg key – this has not been tested but may be worth trying

*The user SID is unique so this has to be done per user. If there are a lot of users listed in the registry it is possible to find which SID belongs to which user by checking the key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Ответы [ 2 ]

1 голос
/ 28 марта 2019

После прочтения вашей правки кажется, что здесь есть место для шевеления. Если мы берем 2 маленьких вольности, это можно сделать в одной командной строке. Если нельзя воспользоваться одной или обеими свободами, дайте мне знать.

Если WMIC не требуется, и если мы можем нацеливать все имеющиеся идентификаторы SID вместо того, чтобы пытаться сопоставить имена с SID, то «reg.exe» и «for» могут сделать это быстро. Вот пример с примером вывода:

(Необязательно) Профили Enum:

cmd:
for /f "delims=\ tokens=2" %A in ('reg query hku ^| findstr /i "S-1-5-21-" ^| findstr /v /i "_Classes"') do @echo ;[i] Profile Found: {%A}

output:
;[i] Profile Found: {S-1-5-21-277974881-2357464463-7727422770-1001}
;[i] Profile Found: {S-1-5-21-277974881-2357464463-7727422770-1002}
;[i] Profile Found: {S-1-5-21-277974881-2357464463-7727422770-1007}

Добавить ключ + значение

cmd:
for /f "delims=\ tokens=2" %A in ('reg query hku ^| findstr /i "S-1-5-21-" ^| findstr /v /i "_Classes"') do @(reg add "hku\%A\Software\Microsoft\Terminal Server Client\Default\Addins\FooKey" /v FooName /t REG_SZ /d "C:\foo\file\foo.dll" /f >nul 2>&1 && (echo ;[i] Reg Key Added {%A}) || (echo ;[i] Reg Key Failed To Add {%A}))

output:
;[i] Reg Key Added {S-1-5-21-277974881-2357464463-7727422770-1001}
;[i] Reg Key Added {S-1-5-21-277974881-2357464463-7727422770-1002}
;[i] Reg Key Added {S-1-5-21-277974881-2357464463-7727422770-1007}

(Необязательно) Подтвердите успех:

cmd:
for /f "delims=\ tokens=2" %A in ('reg query hku ^| findstr /i "S-1-5-21-" ^| findstr /v /i "_Classes"') do @(reg query "hku\%A\Software\Microsoft\Terminal Server Client\Default\Addins\FooKey" /v FooName 2>nul || echo ;[e] Couldn't Find Key {%A})

output:
HKEY_USERS\S-1-5-21-277974881-2357464463-7727422770-1001\Software\Microsoft\Terminal Server Client\Default\Addins\FooKey
    FooName    REG_SZ    C:\foo\file\foo.dll


HKEY_USERS\S-1-5-21-277974881-2357464463-7727422770-1002\Software\Microsoft\Terminal Server Client\Default\Addins\FooKey
    FooName    REG_SZ    C:\foo\file\foo.dll


HKEY_USERS\S-1-5-21-277974881-2357464463-7727422770-1007\Software\Microsoft\Terminal Server Client\Default\Addins\FooKey
    FooName    REG_SZ    C:\foo\file\foo.dll
0 голосов
/ 24 марта 2019

Не уверен, что понимаю ваш вопрос.Мой первый комментарий должен был прояснить это.Вам нужно использовать команду FOR /F для захвата вывода WMIC.Это единственный способ присвоить SID переменной.

@echo off
REM Read file with user names
FOR /F "usebackq tokens=*" %%G in ("users.txt") do (
    REM use user name to find SID
    FOR /F "delims=" %%H IN ('"wmic useraccount where name='%%~G' get sid| findstr /vi "SID""') DO (
        REM Strip trailing line with CR
        FOR /F "delims= " %%I IN ("%%~H") DO (
            REM %%I is now the SID of the USER
            REG ADD "HKEY_USERS\%%I\Software\Microsoft\addstuffhere" /f
            REG ADD "HKEY_USERS\%%I\Software\Microsoft\addstuffhere" /t REG_SZ /d "addstuffhere"" /f
        )
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...