2016-04-20 2 views
0

Это вопрос о старой инструментарии управления Windows (WMI), которую я не могу понять. Если я помечаю класс как [InstrumentationClass (InstrumentationType.Instance)], он отлично работает. Но если я это сделаю с помощью [InstrumentationClass (InstrumentationType.Event)], это не так. Я создал класс инсталяция так:WMI зарегистрирован как InstrumentationClass (InstrumentationType.Event), когда Fire я не вижу его

[assembly: Instrumented(@"Root\RabbitMQMonitor")] 
namespace RabbitMQMonitor.Services 
{ 
    [RunInstaller(true)] 
    public class Installer4WMI : DefaultManagementProjectInstaller { } 
} 

Тогда я помеченный этот класс так:

[InstrumentationClass(InstrumentationType.Instance)] 
public class JustToSeeInstances 
{ 
    public string Message;   
} 

Тогда я зарегистрировать его с помощью Eather InstallUtill.exe или в коде вызова:

Instrumentation.RegisterAssembly(Assembly.GetExecutingAssembly()); 

Когда я звоню Опубликовать:

Instrumentation.Publish(new JustToSeeInstances() 
{ Message = "Instrumentation.Fire(new InstrumentationWarning() executed" }); 

И это работает. В PowerShell:

PS C:\Users\ARipollJ> get-wmiobject -namespace "Root/RabbitMQMonitor" -class JustToSeeInstances 

__GENUS   : 2 
__CLASS   : JustToSeeInstances 
__SUPERCLASS  : 
__DYNASTY  : JustToSeeInstances 
__RELPATH  : JustToSeeInstances.InstanceId="3839",ProcessId="da1d1658-84aa-4394-b0d8-b80ceddfecc7" 
__PROPERTY_COUNT : 3 
__DERIVATION  : {} 
__SERVER   : W7TC2I198DTECN 
__NAMESPACE  : Root\RabbitMQMonitor 
__PATH   : \\W7TC2I198DTECN\Root\RabbitMQMonitor:JustToSeeInstances.InstanceId="3839",ProcessId="da1d1658-84aa- 
        4394-b0d8-b80ceddfecc7" 
InstanceId  : 3839 
Message   : Instrumentation.Fire(new InstrumentationWarning() executed 
ProcessId  : da1d1658-84aa-4394-b0d8-b80ceddfecc7 

НО, если я делаю это с событием:

[InstrumentationClass(InstrumentationType.Event)] 
public class InstrumentationWarning 
{ 
    public string VirtualHost; 
    public string Queue; 
    public string Message; 
} 

А затем вызвать Fire:

Instrumentation.Fire(new InstrumentationWarning() 
{ VirtualHost = virtualHost, Queue = queue, Message = message }); 

Он никогда Eather показывает в WMI проверки инструмента либо в PowerShell :

PS C:\Users\ARipollJ> get-wmiobject -namespace "Root/RabbitMQMonitor" -class InstrumentationWarning 
PS C:\Users\ARipollJ> 

Aclarat ion: Опубликовать для экземпляров и Fire для событий. Я уже перешел, чтобы попробовать, и это не работало. Я действительно уложился в это. Я бы очень признателен за освещение.

+0

Кажется, что вы пытаетесь получать события с помощью 'get-wmiobject' вместо [регистрации на них] (https://technet.microsoft.com/de-de/library/hh849840.aspx). – Clijsters

ответ

0

Благодаря Клийстерс. Это было то, что:

Если я зарегистрируюсь на свое мероприятие. PowerShell:

PS C:\Users\ARipollJ> register-wmiEvent -class 'InstrumentarionWarning' 

Тогда я Instrumentation.Fire его в то я использую "Get-Event":

PS C:\Users\ARipollJ> Get-Event 


ComputerName  : 
RunspaceId  : fc02e8ce-849e-473e-b5b9-d5eac39eb130 
EventIdentifier : 1 
Sender   : System.Management.ManagementEventWatcher 
SourceEventArgs : System.Management.EventArrivedEventArgs 
SourceArgs  : {System.Management.ManagementEventWatcher, System.Management.EventArrivedEventArgs} 
SourceIdentifier : 1e87f848-276b-447d-bbb0-c985dc27b347 
TimeGenerated : 20/04/2016 11:39:37 
MessageData  : 

ComputerName  : 
RunspaceId  : fc02e8ce-849e-473e-b5b9-d5eac39eb130 
EventIdentifier : 2 
Sender   : System.Management.ManagementEventWatcher 
SourceEventArgs : System.Management.EventArrivedEventArgs 
SourceArgs  : {System.Management.ManagementEventWatcher, System.Management.EventArrivedEventArgs} 
SourceIdentifier : 1e87f848-276b-447d-bbb0-c985dc27b347 
TimeGenerated : 20/04/2016 11:40:03 
MessageData  : 

Вот они!