我試圖創建一個永久WMI事件訂閱來在USB驅動器連接時運行腳本。永久性WMI事件消費者不會被觸發,臨時發生
這裏是我創建的過濾器,消費者和綁定:
$computer = "xxx"
$filterNS = "root\cimv2"
$wmiNS = "root\subscription"
$query = "Select * from __InstanceCreationEvent within 5 where targetinstance isa 'win32_logicaldisk'"
$filterName = "TestFilter"
$filterPath = Set-WmiInstance -Class __EventFilter `
-ComputerName $computer -Namespace $wmiNS -Arguments `
@{name=$filterName; EventNameSpace=$filterNS; QueryLanguage="WQL";
Query=$query}
$consumerPath = Set-WmiInstance -Class CommandLineEventConsumer `
-ComputerName $computer -Namespace $wmiNS `
-Arguments @{
name="TestConsumer";
ExecutablePath= "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
CommandLineTemplate = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -executionpolicy bypass -file D:\\reassignDriveletter.ps1"
}
Set-WmiInstance -Class __FilterToConsumerBinding -ComputerName $computer `
-Namespace $wmiNS -arguments @{Filter=$filterPath; Consumer=$consumerPath} |
out-null
一切變得無任何錯誤,我可以看到的過濾器,消費者和WMI事件查看器結合,但如果我附上USB驅動器沒有任何反應(腳本的第一行寫入日誌條目,這就是我所知道的)。
出於測試目的,我創建了一個正常的事件訂閱類似這樣的:
$job = Register-WmiEvent -Query "Select * from __InstanceCreationEvent within 5 where targetinstance isa 'win32_logicaldisk'" -SourceIdentifier usb -Timeout 1000 -Action $scriptblock
這工作絕對沒問題。
我錯過了一些明顯的東西嗎?我會很感激任何幫助。
問候
更新:只是在非域加入測試的Win7電腦和相同的代碼工作正常。 (我的工作站是Win8.1域加入記錄)。我將測試目標系統並回報。
這只是一個贓物,但您是否嘗試刪除-Arguments變量並使用硬編碼的值,例如'-arguments @ {name =「TestFilter」; EventNameSpace =「root \ cimv2」; ...}''''''''''''''''''''''''我只是想知道是否應該用'name =「$ filtername」'引號來指定參數。另外,如果你從C#中取出這個例子,可能是你不需要在你的路徑中使用雙反斜線來處理ExecutablePath和CommandLineTemplate。反斜槓不是PowerShell中的轉義字符。 – 2014-11-24 16:43:12
@KeithHill只用硬編碼值進行了測試,沒有雙反斜槓,但這也沒有幫助:/變量也不是問題,因爲我可以看到wmi查看器中的值是正確的 – Paul 2014-11-24 16:52:30