A .net WebClient objektumot használom a fájlletöltés megvalósításához,
És használd a powershell-t, hogy feliratkozz a DownloadProgressChanged eseményre,
Frissítettem a letöltési folyamatjelzőt.
Az előfizetési esemény a powershell Register-ObjectEvent rendszerét használja, és a bevezetési dokumentum a következő:
Kivonat Feliratkozik azokra az eseményekre, amelyeket egy Microsoft .NET Framework objektum generál.
nyelvtan Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>[[[-Action] <ScriptBlock>] [-Forward] [-MaxTriggerCount <Int32>] [-MessageData <PSObject>] [-SupportEvent ] [<CommonParameters>]
Bemenet Nincs Nem lehet objektumokat csatornázni a Register-ObjectEvent mappába.
Kimenet System.Management.Automation.PSEventJob Ez a cmdlet nem generál semmilyen kimenetet.
egzegézis * Az események, esemény-előfizetések és az eseménysorban csak a jelenlegi ülésben léteznek. Ha bezárod a jelenlegi munkamenetet, az eseménysort megszüntetik, és az esemény előfizetése törölhető.
példa 1. példa: Iratkozzon fel eseményekre, amikor egy új folyamat indul 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"
Ez a példa az eseményekre utal, amelyeket egy új folyamat elindulásakor generálnak.
A parancs a ManagementEventWatcher objektumot használja az EventArrived események megszerzéséhez. Egy lekérdezési objektum megadja, hogy az események instance-létrehozási események legyenek a Win32_Process osztály számára. Példa 2: Határozz meg egy akciót, amely egy eseményre válaszol 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:\>$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 Location Command -- ---- ----- ----------- -------- ------- 2 422cfe5A-65e... True New-Event "PowerShe...
Ez a példa megmutatja, hogyan lehet egy akciót megadni egy eseményre adott válaszra. Amikor egy műveletet megadsz, az emelt események nem kerülnek az eseménysorba. Ehelyett a cselekvés az eseményre reagál.
Ebben a példában, amikor egy instance létrehozási esemény jelenik meg, ami jelzi, hogy egy új folyamat indult, akkor egy új ProcessCreated esemény is megjelenik.
Az akció az $Sender és $EventArgs automatikus változókat használja, amelyek csak eseményműveletekre vannak feltöltve.
A Register-ObjectEvent parancs egy olyan munkaobjektumot ad vissza, amely az akciót képviseli, és háttérfeladatként fut. Használhatod a Job cmdleteket, mint például a Get-Job és Receive-Job, hogy kezeld a háttérállást.
További információért lásd: about_Jobs. 3. példa: Feliratkozzunk objektumeseményekre távoli számítógépeken 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", ' (Új objektum időIntervalla 0,0,1), ' "TargetInstance isa 'Win32_Process'" $ProcessWatcher = Új-objektum System.Management.ManagementEventWatcher $Query $Identifier = "WMI. ProcessCreated" Register-ObjectEvent -input $ProcessWatcher -EventName "EventArrived" ' -SourceIdentifier $Identifier -MessageData "teszt" -Forward}EnableProcessCreationEvent
Ez a példa bemutatja, hogyan lehet feliratkozni objektumeseményekre távoli számítógépeken.
Az első parancs PSSessionokat hoz létre két távoli számítógépen, és elmenti azokat a $S változóban.
A második parancs az Invoke-Command parancsnok FilePath paraméterét használja, hogy lefutassa a ProcessCreationEvent.ps1 szkriptet minden PSSessionban $S-ben.
A szkript tartalmaz egy Register-ObjectEvent parancsot, amely előfizetést ad az Win32_Process objektumon a ManagementEventWatcher objektumon és annak EventArrived objektumán keresztül az instance-létrehozási eseményekre esemény. 4. példa: Használd a dinamikus modult a PSEventJob objektumban PS C:\>$Timer = Új objektum időzítők.Időzítő PS C:\>$Timer.Intervallum = 500 PS C:\>$Job = Register-ObjectEvent -inputObject $Timer -EventName Eheld -SourceIdentifier Timer.Random -Action {$Random = Get-Random -Min 0 -Max 100} PS C:\>$Job.gettype().fullnameSystem.Management.Automation.PSEventJob PS C:\>$Job | Format-List -Property * Állam: RunningModule : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0 Állapotüzenet: HasMoreData : Igaz Elhelyezkedés : Parancs: $Random= Véletlenszerű szert -Min 0 -Max 100 JobStateInfo: Futás Kész : System.Threading.ManualResetEvent InstanceId : 88944290-133d-4b44-8752-f901bd8012e2 Azonosító: 1 Név: Timer.Random ChildJobs : {}... PS C:\>$Timer.Enabled = $True PS C:\>& $Job.module {$Random}60 PS C:\>& $Job.module {$Random}47
Ez a példa megmutatja, hogyan lehet használni a dinamikus modult a PSEventJob objektumban, amely akkor jön létre, amikor egy Műveletet beillesztünk egy eseményregisztrációba.
Az első parancs a New-Object cmdlet-et használja időzítő objektum létrehozásához. A második parancs az időzítő intervallumát 500-ra (milliszekundumra) állítja be.
A harmadik parancs a Register-ObjectEvent parancsnokot használja az időzítő objektum Elapsed eseményének regisztrálására. A parancs tartalmaz egy akciót, amely kezeli az eseményt. Amikor az időzítő intervallum lejár, egy esemény emeli elő, és az akcióban lévő parancsok elindulnak. Ebben az esetben a Get-Random cmdlet véletlenszerű számot generál 0 és 100 között, és elmenti a $Randomvariable-ben.
Amikor egy Register-ObjectEvent parancsban Action paramétert használsz, a parancs egy PSEventJob objektumot ad vissza, amely az akciót képviseli. A parancs a munkaobjektumot a $Job változóban tárolja.
A PSEventJob objektum, amelyet a Register-ObjectEvent cmdlet visszaad, elérhető az eseményelőnélő Action tulajdonságában is. További információért lásd: Get-EventSubscriber.
A negyedik parancs azt mutatja, hogy a $Job változó tartalmaz egy PSEventJob objektumot. Az ötödik parancs a Format-List cmdletet használja, hogy megjelenítse a PSEventJob objektum összes tulajdonságát egy listában.
A PSEventJob rendelkezik egy Module tulajdonsággal, amely egy dinamikus szkriptmodult tartalmaz, amely megvalósítja az akciót.
A hatodik parancs aktiválja az időzítőt.
A fennmaradó parancsok a hívó operátort (&) használják, hogy megidézze a parancsot a modulban, és megjelenítse az $Random változó értékét. A hívásoperátort használhatod bármilyen parancs meghívására egy modulban, beleértve azokat is, amelyeket nem exportáltak. Ebben az esetben a parancsok azt a véletlenszámot mutatják, amely akkor generálódik, amikor az Elast-esemény bekövetkezik.
További információért a modulokról lásd about_Modules.
Kapcsolódó linkek Online verzió: http://go.microsoft.com/fwlink/?LinkId=821845 Get-Event Új esemény Register-EngineEvent Register-WmiEvent Eltávolítás-Esemény Unregister-Event Várakozás-Esemény Végül csatoljuk a PS forráskódot:
Turisták, ha szeretnétek megnézni ennek a bejegyzésnek a rejtett tartalmát, kérlek Válasz
|