Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 10956|Yanıt: 3

PowerShell .net çağrısı yapar ve olaylara abone olur [kaynak kodu]

[Bağlantıyı kopyala]
Yayınlandı 17.01.2017 17:05:59 | | | |


Dosya indirmeyi uygulamak için .net WebClient nesnesini kullanıyorum,

Ve powershell kullanarak DownloadProgressChanged etkinliğine abone ol,

İndirme ilerleme çubuğu güncellendi.

Abonelik etkinliği powershell'in Register-ObjectEvent'ini kullanır ve giriş belgesi şöyledir:

Özet
    Microsoft .NET Framework nesnesi tarafından oluşturulan olaylara abone olur.

gramer
    Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-Forward ] [-MaxTriggerCount <Int32>] [-MessageData <PSObject>] [-DestekOlayı] [<CommonParameters>]


girdi
    Hiçbiri yok
    Nesneleri Register-ObjectEvent'e yönlendiremezsiniz.

Çıktı
    System.Management.Automation.PSEventJob
    Bu cmdlet herhangi bir çıktı üretmez.

tefsir
    * Etkinlikler, etkinlik abonelikleri ve etkinlik kuyruğu yalnızca mevcut oturumda mevcuttur. Mevcut oturumu kapatırsanız, etkinlik kuyruğu atılır ve etkinlik aboneliği iptal edilir.
   

örnek
    Örnek 1: Yeni bir süreç başladığında etkinliklere abone olun
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
    PS C:\>Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"
   
    Bu örnek, yeni bir süreç başladığında oluşturulan olaylara abone olur.

Komut, EventArrived olaylarını almak için ManagementEventWatcher nesnesini kullanır. Bir sorgu nesnesi, olayların Win32_Process sınıfı için örnek oluşturma olayları olduğunu belirtir.
    Örnek 2: Bir olaya yanıt verecek bir eylem belirtin
    PS C:\>$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'"
    PS C:\>$ProcessWatcher = New-Object System.Management.EventWatcher $query
    PS C:\>$Action = { New-Event "PowerShell.ProcessCreated" -Sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance }
    PS C:\>register-objectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action
    Id Name State HasMoreData konum komutu
    --    ----            -----      -----------     --------             -------
    2 422cfe5A-65e... Gerçek Yeni Etkinlik "PowerShe...
   
    Bu örnek, bir olaya yanıt verecek bir eylemin nasıl belirleneceğini gösterir. Bir eylem belirttiğinizde, yükselen olaylar etkinlik kuyruğuna eklenmez. Bunun yerine, eylem olaya yanıt verir.

Bu örnekte, yeni bir sürecin başlatıldığını gösteren bir örnek oluşturma olayı yükseltildiğinde, yeni bir ProcessCreated olayı yükseltilir.

Eylem, yalnızca olay eylemleri için doldurulmuş $Sender ve $EventArgs otomatik değişkenleri kullanır.

Register-ObjectEvent komutu, eylemi temsil eden bir iş nesnesi döndürür ve bu da arka plan işi olarak çalışır. Arka plan işini yönetmek için Get-Job ve Receive-Job gibi İş komutlarını kullanabilirsiniz.

Daha fazla bilgi için bkz. about_Jobs.
    Örnek 3: Uzak bilgisayarlarda nesne olaylarına abone olun
    PS C:\>$S = New-PSSession -ComputerName "Server01, Server02"
    PS C:\> Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1
    PS C:\> Invoke-Command -Session $S { get-event }# ProcessCreationEvent.ps1function Enable-ProcessCreationEvent{ $Query = New-Object System.Management.WqlEventQuery "__ InstanceCreationEvent", '
       (Yeni Nesne Zaman Aralığı 0,0,1), '
       "TargetInstance isa 'Win32_Process'" $ProcessWatcher = Yeni Nesne System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -Input $ProcessWatcher -EventName "EventArrived" '
       -SourceIdentifier $Identifier -MessageData "Test" -Forward}EnableProcessCreationEvent
   
    Bu örnek, uzak bilgisayarlarda nesne olaylarına nasıl abone olacağınızı gösterir.

İlk komut, iki uzak bilgisayarda PSSessions oluşturur ve bunları $S değişkeninde kaydeder.

İkinci komut, Invoke-Command komutunun FilePath parametresini kullanarak $S'daki her PSSession'da ProcessCreationEvent.ps1 bebesini çalıştırır.

Script, Win32_Process nesnedeki örnek oluşturma olaylarına ManagementEventWatcher nesnesi ve EventArrived aracılığıyla abone olan Register-ObjectEvent komutu içerir Olay.
    Örnek 4: PSEventJob nesnesinde dinamik modülü kullanın
    PS C:\>$Timer = Yeni nesne zamanlayıcıları.Zamanlayıcı
    PS C:\>$Timer.Aralık = 500
    PS C:\>$Job = Register-ObjectEvent -InputObject $Timer -EventName Geçti -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Minimum 0 -Max 100}
    PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob
    PS C:\>$Job | Format-Listesi -Özellik *
    Eyalet :
    RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    DurumMesajı :
    HasMoreData : Doğru
    Konum :
    Komut: $Random= Rastgele Alın -En Minimum 0 -Maksimum 100
    JobStateInfo : Koşma
    Bitti: System.Threading.ManualResetEvent
    InstanceId : 88944290-133d-4b44-8752-f901bd8012e2
    Id : 1
    İsim : Timer.Random
    ChildJobs : {}... PS C:\>$Timer.Enabled = $True
    PS C:\>& $Job.module {$Random}60
    PS C:\>& $Job.module {$Random}47
   
    Bu örnek, bir olay kaydına bir Eylem dahil ettiğinizde oluşturulan PSEventJob nesnesinde dinamik modülün nasıl kullanılacağını gösterir.

İlk komut, zamanlayıcı nesnesi oluşturmak için New-Object cmdlet'ini kullanır. İkinci komut, zamanlayıcının aralığını 500 (milisaniye) olarak belirler.

Üçüncü komut, zamanlayıcı nesnesinin Geçmiş olayını kaydetmek için Register-ObjectEvent cmdlet'ini kullanır. Komut, olayı yöneten bir eylem içerir. Zamanlayıcı aralığı dolduğunda, bir olay yükselir ve eylemdeki komutlar çalıştırılır. Bu durumda, Get-Random cmdlet'i 0 ile 100 arasında rastgele bir sayı üretir ve bunu $Randomvariable'de kaydeder.

Register-ObjectEvent komutunda bir Action parametresi kullandığınızda, komut eylemi temsil eden bir PSEventJob nesnesi döndürür. Komut, iş nesnesini $Job değişkeninde kaydeder.

Register-ObjectEvent cmdlet'inin döndürdüğü PSEventJob nesnesi, olay abonesinin Action özelliğinde de mevcuttur. Daha fazla bilgi için Get-EventSubscriber sayfasına bakınız.

Dördüncü komut, $Job değişkenin bir PSEventJob nesnesi içerdiğini gösterir. Beşinci komut, PSEventJob nesnesinin tüm özelliklerini bir listede göstermek için Format-List cmdlet'ini kullanır.

PSEventJob, eylemi uygulayan dinamik bir betik modülü içeren bir Module özelliğine sahiptir.

Altıncı komut zamanlayıcıyı etkinleştirir.

Kalan komutlar, modülde komutu çağırmak ve $Random değişkenin değerini göstermek için çağrı operatörünü (&) kullanır. Çağrı operatörünü kullanarak modüldeki herhangi bir komutu çağırabilirsiniz, dışa aktarılmayan komutlar dahil. Bu durumda, komutlar Geçtiğin olay gerçekleştiğinde oluşturulan rastgele sayı gösterir.

Modüller hakkında daha fazla bilgi için bkz. about_Modules.


İlgili Bağlantılar
    Çevrimiçi Versiyon: http://go.microsoft.com/fwlink/?LinkId=821845
    Get-Event
    Yeni Etkinlik
    Register-EngineEvent
    Register-WmiEvent
    Kaldırma-Olay
    Kayıttan Çıkarma-Olay
    Bekleme Olayı

Son olarak, PS kaynak kodunu ekleyin:

Turistler, bu gönderinin gizli içeriğini görmek isterseniz lütfenYanıt





Önceki:Tek satırlı yorumlar, çok satırlı yorumlar ve blok yorumlar için PowerShell yöntemleri
Önümüzdeki:PowerShell, dosyaları indirmek için WebClient kullanır
Yayınlandı 26.04.2017 14:35:44 |
132432423432423
Yayınlandı 16.04.2019 17:14:12 |
2222222222222
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com