[python] WMI

Radek Holý radekholypublic na gmail.com
Čtvrtek Červen 14 23:33:19 CEST 2012


Dobrý den,

nemáte někdo zkušenosti s editací WMI z Pythonu? Mám kód::

    import wmi
    class_ = wmi.WMI(computer=".", impersonation_level="Impersonate",
privileges=("Backup", "Restore"), namespace="WMI", suffix="BcdStore")
    _result, store_com = class_.OpenStore("")
    store = wmi._wmi_object(store_com)
    manager_com, _result =
store.OpenObject("{9dea862c-5cdd-4e70-acc1-f32b344d4795}")
    manager = wmi._wmi_object(manager_com)
    _result, = manager.SetIntegerElement(0x25000004, 5)
    element_com, _result = manager.GetElement(0x25000004)
    element = wmi._wmi_object(element_com)
    print(element.Integer)  # Beze zmeny :-/

Měl by zavoláním metody ``SetIntegerElement`` nastavit hodnotu 5. Ale
i když vzápětí zavolám ``GetElement``, tak zjistím, že se hodnota
nezměnila.
Přičemž obdobný kód ve VB funguje správně::

    dim objBCD
    dim objBCDStore
    dim objWBM
    dim objElement
    set objBCD =
GetObject("winmgmts:{impersonationlevel=Impersonate,(Backup,Restore)}!root/wmi:BcdStore")
    if Err.number <> 0 then
        WScript.Quit(1)
    end if
    if not objBCD.OpenStore( "", objBcdStore ) then
        WScript.Quit(1)
    end if
    set objBCD = nothing
    if not objBcdStore.OpenObject(
"{9dea862c-5cdd-4e70-acc1-f32b344d4795}", objWBM ) then
        WScript.Quit(1)
    end if
    if not objWBM.SetIntegerElement( &h25000004, 5) then
        WScript.Quit(1)
    end if
    if not objWBM.GetElement( &h25000004, objElement ) then
        WScript.Quit(1)
    end if
    WScript.Echo objElement.Integer

Tento strom WMI přibyl až ve Windows Vista. Oba skripty spouštím z
příkazové řádky se stejnými "rootovskými" oprávněními.

Metoda ``Put_`` se v tomto případě zavolat nedá, ani ji Microsoft v
žádných ukázkových skriptech nepoužívá.

Skript jsem přepsal i pomocí ``win32com`` knihovny (vypustil jsem
``wmi``, která stejně jen obaluje ``win32com``) a ani to nepomohlo.

Děkuju za pomoc
-- 
Radek Holý


Další informace o konferenci Python