Aracılığıyla paylaş


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 Exiting engine 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, bu olay oturumunuzda olay kuyruğuna eklenir. Olay kuyruğundaki olayları almak için cmdlet'ini Get-Event kullanın.

Örnekler

Örnek 1: Uzak bilgisayarlarda PowerShell altyapısı olayını kaydetme

Bu örnek, iki uzak bilgisayarda Bir PowerShell altyapısı olayı için kaydeder.

$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-EngineEvent olayı tanımlamak için SourceIdentifier parametresini kullanır. forward parametresi, altyapıya uzak oturumdaki olayları 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 eylemin nasıl çalıştırılması 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ış oturumundan komut geçmişi kullanıcının $Home dizininde bir XML dosyası dışarı aktarılır.

Örnek 3: Kullanıcı tanımlı bir olaya İçerik Oluşturucu ve 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 oluşturma İş Kimliği 19. Örnek 4'te olay aboneliğini ve işleri kaldırdıktan sonra günlük dosyasını inceleyeceğiz.

Örnek 4: Olayların kaydını silme 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ı siliyoruz.

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 betiği bloğuna $Eventolay hakkında bilgi sağlayan , $EventSubscriber$Sender, , $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 kaydolduğunda 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ünür.

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.OnIdlePSEngineEvent 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şturulmuş 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

Girişi öğesine Register-EngineEventyöneltemezsiniz.

Çıkışlar

None or System.Management.Automation.PSEventJob

Action parametresini kullanırsanız, Register-EngineEventSystem.Management.Automation.PSEventJob nesnesini döndürür. Aksi takdirde, herhangi bir çıkış oluşturmaz.

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ı bir işlem hattı çalıştırmıyorsa boşta olarak kabul edilir. OnIdle olayı, PowerShell 300 milisaniye (ms) boyunca boşta olduğunda tetiklenir.

Not

PSReadLine kullanımda olduğunda, zaman aşımına uğradıklarında ReadKey()OnIdle olayı tetiklenir (300ms yazma yok). 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 olaya işaret etmek için değiştirildi.