Используйте список учетных записей Windows для добавления ключей reg с помощью SIDS

Контейнеры Python содержат ссылки на другие объекты. См. Этот пример:

>>> a = []
>>> b = [a]
>>> b
[[]]
>>> a.append(1)
>>> b
[[1]]

В этом b есть список, содержащий один элемент, который является ссылкой на список a. Список a изменен.

Умножение списка на целое эквивалентно добавлению списка к себе несколько раз (см. операции общей последовательности ). Итак, продолжаем с примера:

>>> c = b + b
>>> c
[[1], [1]]
>>>
>>> a[0] = 2
>>> c
[[2], [2]]

Мы видим, что список c теперь содержит две ссылки на список a, который эквивалентен c = b * 2.

Python FAQ также содержит объяснение этого поведения: Как создать многомерный список?

0
задан Tika9o9 24 March 2019 в 16:50
поделиться

2 ответа

Не уверен, понимаю ли я твой вопрос. Мой первый комментарий должен был прояснить это. Вам нужно использовать команду 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
        )
    )
)
0
ответ дан Squashman 24 March 2019 в 16:50
поделиться

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

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

(Необязательно) Enum Profiles:

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
ответ дан SecurityAndPrivacyGuru 24 March 2019 в 16:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: