Register-ObjectEvent
Microsoft .NET Framework nesnesi tarafından oluşturulan olaylara abonedir.
Sözdizimi
Register-ObjectEvent
[-InputObject] <PSObject>
[-EventName] <String>
[[-SourceIdentifier] <String>]
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Description
Cmdlet, Register-ObjectEvent
yerel bilgisayardaki veya uzak bir bilgisayardaki .NET nesneleri tarafından oluşturulan olaylara abonedir.
Abone olunan olay tetiklendiğinde, oturumunuzda olay kuyruğuna eklenir. Olay kuyruğundaki olayları almak için cmdlet'ini Get-Event
kullanın.
kuyruktaki olayı tanımlamanıza yardımcı olabilecek olayların özellik değerlerini belirtmek için parametresini Register-ObjectEvent
kullanabilirsiniz. Ayrıca, abone olunan bir olay oluşturulduğunda yapılması gereken eylemleri belirtmek için Eylem parametresini ve yerel oturumda uzak olayları 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 cmdlet'ini Get-EventSubscriber
kullanın. Aboneliği iptal etmek için, olay abonesini Unregister-Event
oturumdan silen 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.
Komutu, EventArrived olaylarını almak için ManagementEventWatcher nesnesini kullanır. Sorgu nesnesi, olayların Win32_Process sınıfı için örnek oluşturma olayları olduğunu belirtir.
$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ı tetiklendiğinde 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 ve $EventArgs
otomatik değişkenlerini kullanır$Sender
.
komutu Register-ObjectEvent
, 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 ve Receive-Job
gibi Get-Job
İş cmdlet'lerini kullanabilirsiniz. Daha fazla bilgi için bkz. İşler hakkında.
Örnek 3: Uzak bilgisayarlarda nesne olaylarına abone olma
Bu örnekte, uzak bilgisayarlardaki nesne olaylarına nasıl abone olunacak gösterilmektedir. Bu örnek, betik dosyasında tanımlanan ProcessCreationEvent.ps1
işlevi kullanırEnable-ProcessCreationEvent
. 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ı değişkene $S
kaydederiz. Invoke-Command
Ardından, cmdlet içindeki PSSessions'ın $S
her birinde betiği çalıştırırProcessCreationEvent.ps1
. Bu eylem, işlevi uzak oturumlarda oluşturur Enable-ProcessCreationEvent
.
Son olarak, işlevi uzak oturumlarda çalıştırıyoruz Enable-ProcessCreationEvent
.
işlevi, ManagementEventWatcher nesnesi ve EventArrived olayı aracılığıyla Win32_Process nesnesinde örnek oluşturma olaylarına abone olan bir Register-ObjectEvent
komut 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. cmdlet' Register-ObjectEvent
i zamanlayıcı nesnesinin Geçen olayını kaydeder. PSEventJob nesnesi değişkene $Job
kaydedilir ve olay abonesinin Action ö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 0 ile 100 arasında rastgele bir sayı oluşturur ve değişkenine $Random
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 Module özelliğine sahiptir. Çağrısı işlecini ()&
kullanarak modüldeki komutunu çağırarak değişkenin $Random
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. Eylem'deki komutlar, olayı olay kuyruğuna göndermek yerine bir olay tetiklendiğinde çalıştırılır. Betik bloğu oluşturmak için komutları ayraç içine alın ( { } ).
Action parametresinin değeri , , $EventSubscriber
, $Sender
$EventArgs
, ve $Args
otomatik değişkenlerini içerebilir$Event
. 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. Olay işini yönetmek için İş cmdlet'lerini kullanabilirsiniz.
Tür: | ScriptBlock |
Position: | 101 |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-EventName
Abone olduğunuz olayı belirtir.
Bu parametrenin değeri, .NET nesnesinin ortaya çıkaracağı olayın adı olmalıdır. Örneğin, ManagementEventWatcher sınıfında EventArrived ve Stopped adlı olaylar vardır. Bir olayın olay adını bulmak için cmdlet'ini Get-Member
kullanın.
Tür: | String |
Position: | 1 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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.
Tür: | SwitchParameter |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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.
Tür: | PSObject |
Position: | 0 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-MaxTriggerCount
Bir olayın en fazla kaç kez tetiklenebileceğini belirtir.
Tür: | Int32 |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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.
Tür: | PSObject |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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 SourceIdentifier özelliğinin ve bu abonelikle ilişkili tüm olay nesnelerinin değerinde görünür.
Tür: | String |
Position: | 100 |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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şturulan bir aboneliği görüntülemek veya iptal etmek için ve Unregister-Event
cmdlet'lerinin Force parametresini Get-EventSubscriber
kullanın.
Tür: | SwitchParameter |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
Girişler
None
Nesneleri bu cmdlet'e yöneltemezsiniz.
Çıkışlar
None
Varsayılan olarak, bu cmdlet çıkış döndürmez.
Action 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. Geçerli oturumu kapatırsanız olay kuyruğu atılır ve olay aboneliği iptal edilir.
İlişkili Bağlantılar
PowerShell