Register-ObjectEvent
Microsoft .NET Framework nesnesi tarafından oluşturulan olaylara abonedir.
Syntax
Default (Varsayılan)
Register-ObjectEvent
[-InputObject] <PSObject>
[-EventName] <String>
[[-SourceIdentifier] <String>]
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Description
Register-ObjectEvent cmdlet'i yerel bilgisayardaki veya uzak bilgisayardaki .NET nesneleri tarafından oluşturulan olaylara abonedir.
Abone olunan etkinlik oluşturulduğunda, oturumunuzdaki etkinlik kuyruğuna eklenir. Olay kuyruğundaki olayları almak için Get-Event cmdlet'ini kullanın.
kuyruktaki olayı tanımlamanıza yardımcı olabilecek olayların özellik değerlerini belirtmek için Register-ObjectEvent parametrelerini kullanabilirsiniz. Ayrıca, abone olunan bir olay oluşturulduğunda yapılması gereken eylemleri belirtmek için Eylem parametresini ve uzak olayları yerel oturumdaki olay kuyruğuna göndermek için İlet parametresini de kullanabilirsiniz.
Bir olaya abone olduğunuzda, oturumunuza bir olay abonesi eklenir. Oturumdaki olay abonelerini almak için Get-EventSubscriber cmdlet'ini kullanın. Aboneliği iptal etmek için, olay abonesini oturumdan silen Unregister-Event cmdlet'ini kullanın.
Örnekler
Örnek 1: Yeni bir işlem başladığında olaylara abone olma
Bu örnek, yeni bir işlem başladığında oluşturulan olaylara abonedir.
Komut, eventArrived olaylarını almak
$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
Örnek 2: Bir olaya yanıt vermek için eylem belirtme
Bir eylem belirttiğinizde, tetiklenen olaylar olay kuyruğuna eklenmez. Bunun yerine, eylem olaya yanıt verir. Bu örnekte, yeni bir işlemin başlatıldığını belirten bir örnek oluşturma olayı oluşturulduğunda, yeni bir ProcessCreated olayı oluşturulur.
$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query
$newEventArgs = @{
SourceIdentifier = 'PowerShell.ProcessCreated'
Sender = $Sender
EventArguments = $EventArgs.NewEvent.TargetInstance
}
$Action = { New-Event @newEventArgs }
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 3db2d67a-efff-... NotStarted False New-Event @newEventArgs
Eylem, yalnızca olay eylemleri için doldurulan $Sender ve $EventArgs otomatik değişkenleri kullanır.
Register-ObjectEvent komutu, arka plan işi olarak çalışan eylemi temsil eden bir iş nesnesi döndürür. Arka plan işini yönetmek için Get-Job ve Receive-Jobgibi İş cmdlet'lerini kullanabilirsiniz. Daha fazla bilgi için bkz. about_Jobs.
Örnek 3: Uzak bilgisayarlarda nesne olaylarına abone olma
Bu örnekte, uzak bilgisayarlardaki nesne olaylarına nasıl abone olunacak gösterilmektedir. Bu örnek, Enable-ProcessCreationEvent betik dosyasında tanımlanan ProcessCreationEvent.ps1 işlevini kullanır. Bu betik örnekteki tüm bilgisayarlar tarafından kullanılabilir.
# ProcessCreationEvent.ps1
function Enable-ProcessCreationEvent {
$queryParameters = "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$objectEventArgs = @{
Input = New-Object System.Management.ManagementEventWatcher $Query
EventName = 'EventArrived'
SourceIdentifier = 'WMI.ProcessCreated'
MessageData = 'Test'
Forward = $true
}
Register-ObjectEvent @objectEventArgs
}
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1
Invoke-Command -Session $S { Enable-ProcessCreationEvent }
İlk olarak iki uzak bilgisayarda PSSessions oluşturur ve bunları $S değişkenine kaydederiz. Ardından, Invoke-Command cmdlet'i ProcessCreationEvent.ps1içindeki PSSessions'ın her birinde $S betiğini çalıştırır. Bu eylem, uzak oturumlarda Enable-ProcessCreationEvent işlevini oluşturur.
Son olarak, uzak oturumlarda Enable-ProcessCreationEvent işlevini çalıştıracağız.
İşlev, Register-ObjectEvent nesnesi ve EventArrived olayı aracılığıyla Win32_Process nesnedeki örnek oluşturma olaylarına abone olan bir komutu içerir.
Örnek 4: PSEventJob nesnesinde dinamik modülü kullanma
Bu örnekte, bir olay kaydına Eylem eklediğinizde oluşturulan PSEventJob nesnesinde dinamik modülün nasıl kullanılacağı gösterilmektedir. İlk olarak bir zamanlayıcı nesnesi oluşturup etkinleştiriyoruz, ardından süreölçer aralığını 500 (milisaniye) olarak ayarlıyoruz.
Register-ObjectEvent cmdlet'i zamanlayıcı nesnesinin Geçen olayını kaydeder.
PSEventJob nesnesi $Job değişkenine kaydedilir ve olay abonesinin Eylem özelliğinde de kullanılabilir. Daha fazla bilgi için bkz. Get-EventSubscriber
Zamanlayıcı aralığı her geçtiğinde bir olay oluşturulur ve eylem yürütülür. Bu durumda, Get-Random cmdlet'i 0 ile 100 arasında rastgele bir sayı oluşturur ve $Random değişkenine kaydeder.
$Timer = New-Object Timers.Timer
$Timer.Interval = 500
$Timer.Enabled = $true
$objectEventArgs = @{
InputObject = $Timer
EventName = 'Elapsed'
SourceIdentifier = 'Timer.Random'
Action = {$Random = Get-Random -Min 0 -Max 100}
}
$Job = Register-ObjectEvent @objectEventArgs
$Job | Format-List -Property *
& $Job.Module {$Random}
& $Job.Module {$Random}
State : Running
Module : __DynamicModule_53113769-31f2-42dc-830b-8749325e28d6
StatusMessage :
HasMoreData : True
Location :
Command : $Random = Get-Random -Min 0 -Max 100
JobStateInfo : Running
Finished : System.Threading.ManualResetEvent
InstanceId : 47b5ec9f-bfe3-4605-860a-4674e5d44ca8
Id : 7
Name : Timer.Random
ChildJobs : {}
PSBeginTime : 6/27/2019 10:19:06 AM
PSEndTime :
PSJobTypeName :
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
Information : {}
60
47
PSEventJob, eylemi uygulayan dinamik betik modülünü içeren bir Modülü özelliğine sahiptir. çağrı işlecini (&) kullanarak modülde komutunu çağırarak $Random değişkeninin değerini görüntüleriz.
Modüller hakkında daha fazla bilgi için bkz. about_Modules.
Parametreler
-Action
Olayı işlemek için komutları belirtir.
Eylemindeki komutlar olayı olay kuyruğuna göndermek yerine bir olay tetiklendiğinde çalışır. Betik bloğu oluşturmak için komutları küme ayraçları ({}) içine alın.
Eylemi parametresinin değeri $Event, $EventSubscriber, $Sender, $EventArgsve $args otomatik değişkenleri içerebilir. Bu değişkenler Eylem betik bloğuna olay hakkında bilgi sağlar. Daha fazla bilgi için bkz. about_Automatic_Variables.
Bir eylem belirttiğinizde, Register-ObjectEvent bu eylemi temsil eden bir olay işi nesnesi döndürür. Etkinlik işini yönetmek için Görev cmdlet'lerini kullanabilirsiniz.
Parametre özellikleri
| Tür: | ScriptBlock |
| Default value: | None |
| Joker karakterleri destekler: | False |
| DontShow: | False |
Parametre kümeleri
(All)
| Position: | 101 |
| Zorunlu: | False |
| İşlem hattından gelen değer: | False |
| Özellik adına göre işlem hattından gelen değer: | False |
| Kalan bağımsız değişkenlerden elde edilen değer: | False |
-EventName
Abone olduğunuz olayı belirtir.
Bu parametrenin değeri, .NET nesnesinin ortaya çıkaracağı olayın adı olmalıdır. Örneğin, Get-Member cmdlet'ini kullanın.
Parametre özellikleri
| Tür: | String |
| Default value: | None |
| Joker karakterleri destekler: | False |
| DontShow: | False |
Parametre kümeleri
(All)
| Position: | 1 |
| Zorunlu: | True |
| İşlem hattından gelen değer: | False |
| Özellik adına göre işlem hattından gelen değer: | False |
| Kalan bağımsız değişkenlerden elde edilen değer: | False |
-Forward
Cmdlet'in bu abonelik için olayları uzak oturuma gönderdiğini gösterir. Uzak bir bilgisayarda veya uzak bir oturumda olaylara kaydolırken bu parametreyi kullanın.
Parametre özellikleri
| Tür: | SwitchParameter |
| Default value: | None |
| Joker karakterleri destekler: | False |
| DontShow: | False |
Parametre kümeleri
(All)
| Position: | Named |
| Zorunlu: | False |
| İşlem hattından gelen değer: | False |
| Özellik adına göre işlem hattından gelen değer: | False |
| Kalan bağımsız değişkenlerden elde edilen değer: | False |
-InputObject
Olayları oluşturan .NET nesnesini belirtir. Nesneyi içeren bir değişken girin veya nesneyi alan bir komut veya ifade yazın.
Parametre özellikleri
| Tür: | PSObject |
| Default value: | None |
| Joker karakterleri destekler: | False |
| DontShow: | False |
Parametre kümeleri
(All)
| Position: | 0 |
| Zorunlu: | True |
| İşlem hattından gelen değer: | False |
| Özellik adına göre işlem hattından gelen değer: | False |
| Kalan bağımsız değişkenlerden elde edilen değer: | False |
-MaxTriggerCount
Bir olayın en fazla kaç kez tetiklenebileceğini belirtir.
Parametre özellikleri
| Tür: | Int32 |
| Default value: | None |
| Joker karakterleri destekler: | False |
| DontShow: | False |
Parametre kümeleri
(All)
| Position: | Named |
| Zorunlu: | False |
| İşlem hattından gelen değer: | False |
| Özellik adına göre işlem hattından gelen değer: | False |
| Kalan bağımsız değişkenlerden elde edilen değer: | False |
-MessageData
Bu olay aboneliğiyle ilişkilendirilecek ek verileri belirtir. Bu parametrenin değeri, bu abonelikle ilişkili tüm olayların MessageData özelliğinde görüntülenir.
Parametre özellikleri
| Tür: | PSObject |
| Default value: | None |
| Joker karakterleri destekler: | False |
| DontShow: | False |
Parametre kümeleri
(All)
| Position: | Named |
| Zorunlu: | False |
| İşlem hattından gelen değer: | False |
| Özellik adına göre işlem hattından gelen değer: | False |
| Kalan bağımsız değişkenlerden elde edilen değer: | False |
-SourceIdentifier
Abonelik için seçtiğiniz bir adı belirtir. Seçtiğiniz ad geçerli oturumda benzersiz olmalıdır. Varsayılan değer, PowerShell'in atadığını GUID'dir.
Bu parametrenin değeri, abone nesnesinin ve bu abonelikle ilişkili tüm olay nesnelerinin SourceIdentifier özelliğinin değerinde görünür.
Parametre özellikleri
| Tür: | String |
| Default value: | None |
| Joker karakterleri destekler: | False |
| DontShow: | False |
Parametre kümeleri
(All)
| Position: | 100 |
| Zorunlu: | False |
| İşlem hattından gelen değer: | False |
| Özellik adına göre işlem hattından gelen değer: | False |
| Kalan bağımsız değişkenlerden elde edilen değer: | False |
-SupportEvent
Cmdlet'in olay aboneliğini gizlediğini gösterir. Geçerli abonelik daha karmaşık bir olay kayıt mekanizmasının parçası olduğunda ve bağımsız olarak keşfedilmemesi gerektiğinde bu parametreyi kullanın.
SupportEvent parametresiyle oluşturulmuş bir aboneliği görüntülemek veya iptal etmek için ve Get-EventSubscriber cmdlet'lerinin Unregister-Event parametresini kullanın.
Parametre özellikleri
| Tür: | SwitchParameter |
| Default value: | None |
| Joker karakterleri destekler: | False |
| DontShow: | False |
Parametre kümeleri
(All)
| Position: | Named |
| Zorunlu: | False |
| İşlem hattından gelen değer: | False |
| Özellik adına göre işlem hattından gelen değer: | False |
| Kalan bağımsız değişkenlerden elde edilen değer: | False |
CommonParameters
Bu cmdlet yaygın parametreleri destekler: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction ve -WarningVariable. Daha fazla bilgi için bkz. about_CommonParameters.
Girişler
None
Nesneleri bu cmdlet'e yöneltemezsiniz.
Çıkışlar
None
Varsayılan olarak, bu cmdlet çıkış döndürmez.
PSEventJob
Eylem parametresini kullandığınızda, bu cmdlet bir PSEventJob nesnesi döndürür.
Notlar
Olaylar, olay abonelikleri ve olay kuyruğu yalnızca geçerli oturumda bulunur. Mevcut oturumu kapatırsanız, etkinlik kuyruğu silinir ve etkinlik aboneliği iptal edilir.