Register-EngineEvent

PowerShell altyapısı ve cmdlet'i tarafından oluşturulan olaylara New-Event abonedir.

Syntax

Register-EngineEvent
        [-SourceIdentifier] <String>
        [[-Action] <ScriptBlock>]
        [-MessageData <PSObject>]
        [-SupportEvent]
        [-Forward]
        [-MaxTriggerCount <Int32>]
        [<CommonParameters>]

Description

Cmdlet, Register-EngineEvent PowerShell altyapısı ve cmdlet'i tarafından oluşturulan olaylara New-Event abonedir. Olayı belirtmek için SourceIdentifier parametresini kullanın.

Bu cmdlet'i, cmdlet tarafından New-Event oluşturulan OnIdle veya Çıkış altyapısı olaylarına ve olaylarına abone olmak için kullanabilirsiniz. Bu olaylar abone olmadan oturumunuzda olay kuyruğuna otomatik olarak eklenir. Ancak abone olmak olayları iletmenize, olaylara yanıt vermek için bir eylem belirtmenize ve aboneliği iptal etmenizi sağlar.

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.

Abone olunan olay tetiklendiğinde, oturumunuzda olay kuyruğuna eklenir. Olay kuyruğundaki olayları almak için cmdlet'ini Get-Event kullanın.

Örnekler

Örnek 1: Uzak bilgisayarlara PowerShell altyapısı olayı kaydetme

Bu örnek, iki uzak bilgisayarda bir PowerShell altyapısı olayına kaydolr.

$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S {
  Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Forward
}

New-PSSession uzak bilgisayarların her birinde kullanıcı tarafından yönetilen bir oturum (PSSession) oluşturur. Invoke-Command Cmdlet uzak oturumlarda komutunu çalıştırır Register-EngineEvent . Register-EngineEventolayı tanımlamak için SourceIdentifier parametresini kullanır. forward parametresi, altyapıya olayları uzak oturumdan yerel oturuma iletmesini söyler.

Örnek 2: Çıkış olayı gerçekleştiğinde belirtilen eylemi gerçekleştirme

Bu örnekte, PowerShell.Exiting olayı gerçekleştiğinde belirli bir eyleme geçmek için nasıl çalıştırılacak Register-EngineEvent gösterilmektedir.

Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
    Get-History | Export-Clixml $HOME\history.clixml
}

Olay aboneliğini gizlemek için SupportEvent parametresi eklenir. PowerShell'den çıkıldığında, bu durumda, çıkış oturumundaki komut geçmişi kullanıcının $HOME dizininde bir XML dosyası dışarı aktarılır.

Örnek 3: Kullanıcı tanımlı olay oluşturma ve olaya abone olma

Bu örnek, MyEventSource kaynağından olaylar için bir abonelik oluşturur. Bu, bir işin ilerleme durumunu izlemek için kullanacağımız rastgele bir kaynaktır. Register-EngineEvent aboneliği oluşturmak için kullanılır. Action parametresinin betik bloğu, olay verilerini bir metin dosyasına kaydeder.

Register-EngineEvent -SourceIdentifier MyEventSource -Action {
    "Event: {0}" -f $event.messagedata | Out-File c:\temp\MyEvents.txt -Append
}

Start-Job -Name TestJob -ScriptBlock {
    While ($True) {
        Register-EngineEvent -SourceIdentifier MyEventSource -Forward
        Start-Sleep -seconds 2
        "Doing some work..."
        New-Event -SourceIdentifier MyEventSource -Message ("{0} -  Work done..." -f (Get-Date))
    }
}
Start-Sleep -seconds 4
Get-EventSubscriber
Get-Job

SubscriptionId   : 12
SourceObject     :
EventName        :
SourceIdentifier : MyEventSource
Action           : System.Management.Automation.PSEventJob
HandlerDelegate  :
SupportEvent     : False
ForwardEvent     : False

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
18     MyEventSource                   Running       True                                 …
19     TestJob         BackgroundJob   Running       True            localhost            …

Register-EngineEvent 18. İş Kimliği oluşturuldu. Start-Job 19. İş Kimliği oluşturuldu. Örnek 4'te olay aboneliğini ve işleri kaldırıp günlük dosyasını inceleyeceğiz.

Örnek 4: Olayların kaydını kaldırma ve işleri temizleme

Bu, Örnek 3'ün devamıdır. Bu örnekte, birkaç olayın gerçekleşmesini sağlamak için 10 saniye bekleriz. Ardından olay aboneliğinin kaydını kaldırıyoruz.

PS> Start-Sleep -seconds 10
PS> Get-EventSubscriber | Unregister-Event
PS> Get-Job

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
18     MyEventSource                   Stopped       False                                …
19     TestJob         BackgroundJob   Running       True            localhost            …

PS> Stop-Job -Id 19
PS> Get-Job | Remove-Job
PS> Get-Content C:\temp\MyEvents.txt
Event: 2/18/2020 2:36:19 PM -  Work done...
Event: 2/18/2020 2:36:21 PM -  Work done...
Event: 2/18/2020 2:36:23 PM -  Work done...
Event: 2/18/2020 2:36:25 PM -  Work done...
Event: 2/18/2020 2:36:27 PM -  Work done...
Event: 2/18/2020 2:36:29 PM -  Work done...
Event: 2/18/2020 2:36:31 PM -  Work done...

Cmdlet, Unregister-Event olay aboneliğiyle ilişkili işi durdurur (İş Kimliği 18). İş Kimliği 19 hala çalışıyor ve yeni olaylar oluşturuyor. İş cmdlet'leri işi durdurur ve gereksiz iş nesnelerini kaldırır. Get-Content günlük dosyasının içeriğini görüntüler.

Parametreler

-Action

Olayları 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ı küme ayraçları ({}) içine alın.

Action parametresinin değeri, Eylem betik bloğuna $Eventolay hakkında bilgi sağlayan , $Sender$EventSubscriber, , $EventArgsve $Args otomatik değişkenlerini içerebilir. Daha fazla bilgi için bkz . about_Automatic_Variables.

Bir eylem belirttiğinizde, Register-EngineEvent bu eylemi temsil eden bir olay işi nesnesi döndürür. Olay işini yönetmek için İş cmdlet'lerini kullanabilirsiniz.

Type:ScriptBlock
Position:101
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Forward

Cmdlet'in bu abonelik için olayları yerel bilgisayardaki oturuma gönderdiğini gösterir. Uzak bir bilgisayarda veya uzak bir oturumda olaylara kaydolırken bu parametreyi kullanın.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxTriggerCount

Eylemin olay aboneliği için en fazla kaç kez yürütüldüğünü belirtir.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MessageData

Olayla ilişkili ek verileri belirtir. Bu parametrenin değeri, olay nesnesinin MessageData özelliğinde görüntülenir.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SourceIdentifier

Abone olduğunuz olayın kaynak tanımlayıcısını belirtir. Kaynak tanımlayıcı geçerli oturumda benzersiz olmalıdır. Bu parametre zorunludur.

Bu parametrenin değeri, abone nesnesinin SourceIdentifier özelliğinin ve bu abonelikle ilişkili tüm olay nesnelerinin değerinde görünür.

Değer, olayın kaynağına özgüdür. Bu, cmdlet'iyle New-Event kullanmak için oluşturduğunuz rastgele bir değer olabilir. PowerShell altyapısı, PowerShell.Exiting ve PowerShell.OnIdle PSEngineEvent değerlerini destekler.

Type:String
Position:100
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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 ekleyin.

SupportEvent parametresiyle oluşturulan bir aboneliği görüntülemek veya iptal etmek için veya Unregister-Event cmdlet'lerine Force parametresini Get-EventSubscriber ekleyin.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Girişler

None

Nesneleri bu cmdlet'e yöneltemezsiniz.

Çıkışlar

None

Varsayılan olarak, bu cmdlet çıkış döndürmez.

PSEventJob

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.

Exiting olayına abone olurken, Action parametresi tarafından yürütülebilen cmdlet'ler Microsoft.PowerShell.Core ve Microsoft.PowerShell.Utility modüllerindeki cmdlet'lerle sınırlıdır. Çıkış olayı yalnızca oturumdan PowerShell denetimi altında çıkıldığında tetiklenir. Konak uygulaması veya terminal penceresi kapatıldığında olay tetiklenmez.

Altyapı, işlem hattı çalıştırmıyorsa boşta olarak kabul edilir. PowerShell 300 milisaniye (ms) boyunca boşta kaldığında OnIdle olayı tetiklenir.

Not

PSReadLine kullanımda olduğunda, zaman aşımına uğradıklarında ReadKey() OnIdle olayı tetiklenir (300ms'de yazma olmaz). Kullanıcı bir komut satırını düzenlemenin ortasındayken, örneğin kullanıcı hangi parametrenin kullanılacağına karar vermek için yardım okuyorken olaya işaret edilebilir. PSReadLine 2.2.0-beta4 sürümünden başlayarak, OnIdle davranışı yalnızca zaman aşımı olduğunda ReadKey() ve geçerli düzenleme arabelleği boşsa olayı işaret etmek için değiştirildi.