python - Windows forhindrer forespørgsel på HKLM; returnerer HKCU i stedet

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger ActivePython 2.5 til at læse registreringsdatabasen for pGina, der specifikt angiver hvilke GID'er der er tilladt på computeren. Disse oplysninger kan med jævne mellemrum ændres for hver computer som redigeret gennem pGina, så jeg vil have mit Python script til at være kunne kontrollere disse værdier hver gang.


Nemt nok. Den følgende Windows-kommando får disse oplysninger til mig:


reg query HKLMSoftwarepGinaldapauth


... undtagen når jeg kører den med Python, får jeg det her:


>>> import subprocess
>>> command = 'reg query HKLMSoftwarepGinaldapauth'
>>> ldapauth = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE).communicate()[0]
ERROR: The system was unable to find the specified registry key or value.


Så når jeg kører 'reg query HKLM \ Software' gennem Python, sporer den en liste over nøglerne og værdierne under HK CU \ Software, snarere end HKLM.


Jeg kører Python som administrator (bekræftet ved at bruge getpass.getuser ()), og når jeg kører den samme kommando fra et batch script, får jeg den korrekte liste under HKLM. Men når jeg kalder batch script fra Python, tilbage til ole 'HKCU resultater.


Så jeg er lidt fast. Har nogen nogen indsigt?


EDIT: Som beskrevet senere kører jeg Windows 7 64-bit, og jeg har forsøgt \_winreg metoderne, herunder det valgfrie 4. sam 'argument' i OpenKey.

Bedste reference


Brug winreg. (winreg.OpenKey og winreg.Query*). Vejen hurtigere, du behøver ikke at køre en shell-kommando, og det vil endda returnere dig svære registreringsværdityper som f.eks. BINARY, alt på en OO-måde. [6]


#import \_winreg as winreg # the 'correct' idiom for importing
from \_winreg import *

with OpenKey(HKEY\_LOCAL\_MACHINE,'SoftwarepGinaldapauth') as key:
    ... do something with QueryValue(key[,...])


winreg gør jobbet fint, selvom grænsefladen er ret quirky, da den underliggende Windows-grænseflade var. Du kan godt lide at skrive en wrapper til opkaldsopkaldet, esp. Hvis jeg kan lide mig, skriver du en generator for at få rekursion og opregning af undernøgler, mønster-matching til nøgle navne, begræns søgning til bestemte tilladelige registreringsværdier mv osv. etc.

Andre referencer 1


Så jeg har stadig ikke fundet en løsning på hovedårsagen i mit tilfælde, men jeg kan dog arbejde rundt. Et script, der køres af SYSTEM ved hvert login, vil nu eksportere de pågældende nøgle (r) til en tekstfil, der kan kan let analyseres.