Найти - Пользователи
Полная версия: winreg. Чтение реестра на удалённой машине.
Начало » Python для новичков » winreg. Чтение реестра на удалённой машине.
1
varrt
Добрый день, камрады (или так уже не пишут?) )

Мне надо с удалённых машин в локальной сети считать один ключ реестра.

считать у себя проблем не вызывает, к примеру

import winreg
s= winreg.OpenKey(winreg.HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer")
try:
    i = 0
    while 1:
        name, value, type = winreg.EnumValue(s, i)
        print (name, value, type)
        i += 1
except WindowsError:
print()

А задача состоит в том чтобы узнать есть ли такой параметр у машин в диапазоне 10,10,10,1-10,10,10,255.

Ещё не маловажный нюанс.. Надо делать это под забитой учёткой. (не с той, с которой производится запуск программы)

То есть. Запускаем программу, вбиваем учётку доменадмина, сегмент сети и она пробегается по всем машинам и смотрит ключик, выводя тех, у кого его нет.

Крутил вот это
winreg.ConnectRegistry(computer_name, key)
но что-то без профита(

Помогите плиз
varrt
Коллеги, есть варианты в какую сторону смотреть?

Может как-то os покрутить? Только как прокинуться в удалённое окружение, да ещё и под вбиваемой учёткой?
Kasta_neda
В ОС Windows встроен механизм редактирования реестра удаленного компьютера. Чтобы воспользоваться им для работы с удаленным реестром вы должны быть членом группы локальных администраторов на удаленной машине.

Второе необходимое условие — запущенная служба Удаленный реестр. Её нужно заранее включить на удаленной машине (Панель управления > Администрирование > Службы), либо включить службу удаленно.
Полезным было бы добавить, что служба «Удаленный реестр» имеет имя RemoteRegistry. Включить ее можно командой net start RemoteRegistry или sc start RemoteRegistry. На удаленном компьютере команду можно выполнить при помощи psexec.

import _winreg
#import win32com.client
 
host = "san" # remote MACHINE or local
key = _winreg.ConnectRegistry(host, _winreg.HKEY_LOCAL_MACHINE)
hkey = _winreg.OpenKey(key, r"Software\Microsoft\Windows\CurrentVersion\Uninstall")
num = _winreg.QueryInfoKey(hkey)[0]
print "*** Found %d Software ***" % num
 
try:
    for x in range(1000):
        uninstall = _winreg.EnumKey(hkey, x)
        skey = _winreg.OpenKey(key,"Software\Microsoft\Windows\CurrentVersion\Uninstall\%s" % uninstall)
        try:
            software = _winreg.QueryValueEx(skey, "DisplayName")[0]
            print "%s-%s" % (uninstall, software)
        except:
            pass
except:
    pass
varrt
Спасибо за ответ!

А как сделать такой запрос к регистру, не под своими учётными данными, а под вводимыми?

Рабочая учётка не является доменадмином, потому её хотелось бы вводить при выполнении программы.

Ещё вопрос о службе.. Она не у нас по групповым политикам отключена по секьюрным соображениям и включать бы её не хотелось(

Может можно как-то так:

прокинуться в удалённое окружение и там выполнить, к примеру:

import os
os.popen('regedit.exe -ea C:\Font.reg "HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"')
print open('C:\Font.reg', 'r').read()

??
Kasta_neda
Пробуйте WMI, или в связке WMI+_winreg
типа этого, но локальный я так просмотрел а вот удаленный не удалось, но пробуйте, может я просто что то не так делал
import _winreg
import wmi
c = wmi.WMI(computer="192.168.1.4", user="admin", password="pass",namespace="root/default").StdRegProv
result, names = c.EnumKey (
hDefKey=_winreg.HKEY_LOCAL_MACHINE,
sSubKeyName="SYSTEM\ControlSet001\Services\MRxDAV"
)
for item in names:
    print item
Или через win32
http://code.activestate.com/recipes/360649-remote-shutdown-on-windows/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB