2012-10-23 49 views
0

我正在學習文件系統監控,以加快我的郵件服務器的第3次和第4次備份。我有一個漂亮的VB腳本,在驅動器D上完美地工作,但是當我查詢驅動器C的更改時,如果使用通配符,則不會返回任何結果。爲什麼WQL LIKE操作符不能在驅動器c上工作,但在驅動器d上工作正常?

這裏是我的查詢:

這工作得很好C:\ SC,但不返回子文件夾的變化:

  Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path = '\\sc\\'))

這對於d正常工作:\ SC,並不會返回子文件夾的變化:

  Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='d:' And TargetInstance.Path LIKE '\\sc\\%'))

這一個根本沒有返回任何變化。沒有錯誤消息被返回,並且腳本繼續運行:

  Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path LIKE '\\sc\\%'))

雙括號使我可以添加與「OR」相關的類似查詢。

我的系統驅動器是驅動器C.
驅動器D是一個可移動的USB驅動器。

我改變了我的系統驅動器上的一些設置,以防止這種情況發生?
或者查詢返回的結果太多?

我一直在尋找這個幾個小時。任何見解將不勝感激。

回答

3

這是因爲當您在CIM_DataFile類中使用WQL語句中的LIKE運算符時,WMI掃描整個驅動器以找到匹配項,現在因爲USB驅動器具有更小(且簡單)的樹文件夾結構WMI可以更快地返回結果。但是當您使用C驅動器時,WMI仍然運行查詢,直到找到所有匹配項。所以建議是不CIM_DataFile使用LIKE運算符,而不是僅僅使用=運營商,像這樣:

Select * From __InstanceOperationEvent Within 1 Where TargetInstance ISA 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path = '\\sc\\')) 

PD:因爲你希望監視多個文件夾中的變化如果您使用的是LIKE運營商,這是不可能,相反,您必須爲每個文件夾使用一個WQL和事件觀察器。

+0

好吧,聽起來可行,但糾正我,如果我錯了 - 驅動器不被查詢,而是事件日誌。上面給出的第二個例子完美地適用於驅動器D:上的文件夾和子文件夾,順便說一下,它備份了4個不同的服務器,使它既不小也不簡單,所以顯然可以使用LIKE來檢索子文件夾更改,對?每個文件的創建,刪除和更改都將記錄到事件日誌中,那麼如何查詢事件日誌以查找文件夾上發生的事件以及驅動器c上的子文件夾:? – alfadog67

+0

您的c和d驅動器中有多少個文件? – RRUZ

+0

C驅動器是典型的Windows安裝,D驅動器是3個典型的Windows安裝和一個Linux。 – alfadog67

相關問題