[python-win32] Backing up and clearing event logs

Tim Golden mail at timgolden.me.uk
Mon Jul 23 12:40:28 CEST 2007


Mårten Hedman wrote:
> Thank you for your quick answer. Unfortunately I get the same error 
> message.
> 
> BTW, is WMI case sensitive regarding method names? If I run your example 
> with 'print log.BackupEventLog', I get the error:
> 
> <dump>
>  >>> c=wmi.WMI()
>  >>> log=c.Win32_NTEventLogFile
>  >>> print log.BackupEventLog
> Traceback (most recent call last):
>   File "<interactive input>", line 1, in <module>
>   File "C:\Python25\lib\site-packages\wmi.py", line 474, in __getattr__
>     handle_com_error (error_info)
>   File "C:\Python25\lib\site-packages\wmi.py", line 188, in 
> handle_com_error
>     raise x_wmi, "\n".join (exception_string)
> x_wmi: -0x7ffdfff7 - Exception occurred.
>   Error in: SWbemObjectEx
>   -0x7ffbefd1 - Invalid method Parameter(s)
>  >>>
> </dump>
> 
> Both 'lf.BackupEventLog (ArchiveFileName="c:\\temp\\blah.blah")' and 
> 'lf.BackupEventlog (...)' returns the same error though

OK. The bottom line seems to be:

1) I was (partly) wrong
2) Microsoft generates crap error messages

The following code works for me:

<code>
import wmi
c = wmi.WMI (privileges=["security", "backup"])
for log in c.Win32_NTEventLogFile (LogfileName="Application"):
   print log.FileName
   result, = log.BackupEventlog (ArchiveFileName=r"c:\temp\%s.log" % log.FileName)
   if result <> 0:
     raise RuntimeError, "%s could note be written: error %d" % (log.FileName, result)

</code>

Note several things:

a) You have to take security & backup privs. This was actually
documented on the method description (print log.BackupEventlog)
but I missed it first time round.

b) You have -- in this version of the module -- to pass the
ArchiveFileName keyword parameter.

c) The method is named (at least on my XP SP2 box) "BackupEventlog"
(note the capitalisation). I don't know if the underlying WMI is
case-sensitive, but the module uses a dictionary to cache method
names, which obviously *is* case-sensitive. Any unknown property
is passed through direct to the underlying provider. What that does
with it is unknown (to me :)

Hope all that helps.

Tim

PS As a footnote, I have this very frustrating experience where
*some* people -- and it looks to me as though you're one of
them -- get the property passthrough stuff for free (ie it would
happen even without my module) where I never do. I've never
managed to track this down. TJG


More information about the Python-win32 mailing list