|
|
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ütfen Yanı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
|