1

Konu: Bir objenin field lerini listelemek

Merhaba,

loWMIService = Getobject("winmgmts:\\OZGUR\root\cimv2")
colRetrievedEvents = loWMIService.ExecQuery("Select * from Win32_NTLogEvent .....


elimde yukaridaki gibi 2 satir var. Bununla OZGUR isimli server in event viewer da ne varsa "colRetrievedEvents" isimli nesneye aliyorum. Yani bu nesne midir nedir onu da cozemedim.

colRetrievedEvents a ait field leri nasil listelerim. AELEMENT diyorum. bu array degil ki diyor. Display Structure diyorum hani DBF diyor. Bir bilen varmidir?


Ozgur

Klasik ama cok dogru - Bilgi Paylastikca Cogalir ve Degerlenir !

2

Re: Bir objenin field lerini listelemek

Ozgur gelen bir object collection (event object collection). Sunun gibi:

colItems = { objEvent1, objEvent2 .... }

Her bir event objesinin Properties collectioni var. Her bir propertynin de Name, Value ... gibi kendi propertyleri.

Asagida security logu disindaki loglar icin son 2 gunun eventlerini alan bir ornek var (Security haric olmasi ornek icin, dahil olabilir veya spesifik olarak sadece Application olabilir, zaman sinirlamasi daha onemli cunku tum eventleri alirsan bunun cevirimi yavas, belki daha efektif bir kodla hizli olabilir).

Visual Fox Pro
Set Textmerge Delimiters To '%%','%%'

oWBEM = Getobject("winmgmts://localhost/root/cimv2")
* Events from all logs except Security since yesterday
colitems = oWBEM.ExecQuery("Select * from Win32_NTLogEvent Where Logfile <> 'Security' and TimeGenerated >= '"+DTOC(DATE()-1,1)+"'")
*colitems = oWBEM.ExecQuery("Select * from Win32_NTLogEvent Where Logfile <> 'Security'")
 
* Sonucu XML'e yaz
Set Textmerge To Memvar m.lcXML Noshow
Set Textmerge On
\\<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
\<VFPData>
For Each objEvent In  colitems
*  If Left(Alltrim(objEvent.TimeGenerated),8) == Dtoc(Date(),1)
    \    <dataRow>
    For Each oProp In objEvent.Properties_
            \    <%%Trim(oProp.Name)%%>
      If Isnull(oProp.Value)
            \\NULL
      Else
        If !oProp.IsArray
          If Type('oProp.Value') = 'C'
                \\%%STRTRAN(STRTRAN(oProp.Value,'<','&lt;'),'>','&gt;')%%
          Else
                \\%%oProp.Value%%
          Endif
        Else
                    \\Array values:
          laVals = oProp.Value
          For ix = 1 To Alen(laVals)
            If Type('laVals[m.ix]') = 'C'
                    \%%STRTRAN(STRTRAN(laVals[m.ix],'<','&lt;'),'>','&gt;')%%
            Else
                    \%%laVals[m.ix]%%
            Endif
          Endfor
        Endif
      Endif
            \    </%%Trim(oProp.Name)%%>
    Endfor
    \    </dataRow>
*  Endif
Endfor
\</VFPData>
Set Textmerge To
Set Textmerge Off
* XML'i cursore cevirip goster
Xmltocursor(m.lcXML,'myCursor',4096)
Browse

3

Re: Bir objenin field lerini listelemek

Cetin Abi Selam,

Verdigin ornek icin tesekkur ederim. Aradigimin yarisi 

TimeGenerated >= '"+DTOC(DATE()-1,1)+"'")    bu idi smile

Ama simdi benim asil sorunum su. Ben her tarama yaptigimda o tarihi bir dbf e yazacam. Diyelim ki benim dbf adi elogs.dbf. degiskende xtarih olsun.

o zaman kod asagidaki gibi olacak

colitems = oWBEM.ExecQuery("Select * from Win32_NTLogEvent Where Logfile <> 'Security' and EventType = 1 and TimeGenerated > '"+DTOC(elogs.xdate,1)+"'")

yani bana sadece error eventlerini getir ve son aramadan sonraki kayitlari goreyim. Bu sekilde yaparsam hiz akzanmis olacam. Bir once baktiklarima bir daha bakip zaman kaybetmis olmam.

Buraya kadar yaptim calisiyor. Gayet guzel. Pekiiiiiiiiiiii ya o onceki tarih ile tarama yapilan tarih arasinda herhangi bir error event yok ise?

Iste Cetin abi benim problem burada basliyor. Program ole xxxxx falan filan bir hata verip kesip atiyor. Bu hata da

For Each objEvent In  colitems

ustteki satirda oluyor. Programda hakli bakacak bir kayit yokki FOR dongusune girsin. Benim yapmak istedigim bu for dongusunden once bir kontrol koymak ve eger herhangi birsey bulundu ise donguye girmesini saglamak. hani bu benim problemimi cozer diye dusunuyorum.

colitems.COUNT diye bisi vardi. bunu kullanincada ayni sey oluyor. Bu sefer bu satirda o hatayi veriyor. Yani kisacasi eger yaptigimiz Select sorgulamasi sonucu birsey bulundu ise tamam ama bulunamadi ise hata aliyorum. bunu COLITEMS a bulasmadan kontrol etmenin yada bu problemi bir sekilde asmanin bir yolu varmidir ?

Klasik ama cok dogru - Bilgi Paylastikca Cogalir ve Degerlenir !

4

Re: Bir objenin field lerini listelemek

If colItems.Count > 0
calisiyor.

5

Re: Bir objenin field lerini listelemek

bunu bir daha deneyecegim.

peki bu colItems icindeki sourcename, recordnumber, logfile, timegenerated ..... gibi degiskenler var. colItems icindeki tum degiskenlerin listesini nasil bir kodlama ile ekrana yazdirim ?

Klasik ama cok dogru - Bilgi Paylastikca Cogalir ve Degerlenir !

6

Re: Bir objenin field lerini listelemek

Visual Fox Pro
For Each objEvent In  colitems

  For Each oProp In objEvent.Properties_
    ? oProp.Name
  Endfor
  Exit
Endfor

7

Re: Bir objenin field lerini listelemek

Ya ben cok soruyom galiba ama idare edin smile

simdi yukaridaki kodu denedim. butun fieldler geldi. ancak tuhaf bisi var. colitems.count yaptik. peki bu count denen sey neden listede yok ? yukaridaki kodu yazinca count gozukmuyor.

Klasik ama cok dogru - Bilgi Paylastikca Cogalir ve Degerlenir !

8

Re: Bir objenin field lerini listelemek

Valla ne demek istedigini anlamadim. Butun collectionlarda count var.

9

Re: Bir objenin field lerini listelemek

Oncekini biraz karisik yazdim galiba.

"Butun collectionlarda count var" demissin. peki count disinda daha baska neler de onu nasil listelerim yada nereden gorebilirim?

Klasik ama cok dogru - Bilgi Paylastikca Cogalir ve Degerlenir !

10

Re: Bir objenin field lerini listelemek

set step on
koy
objenin adini command windowda yaz, noktayi koy, intellisense listeler.

11

Re: Bir objenin field lerini listelemek

valla ne diyeyim sen bu isi biliyorsun smile

Klasik ama cok dogru - Bilgi Paylastikca Cogalir ve Degerlenir !