Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 10956|Válasz: 3

A PowerShell .net-et hív és előfizet az eseményekre [forráskód]

[Linket másol]
Közzétéve 2017. 01. 17. 17:05:59 | | | |


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érlekVálasz





Előző:PowerShell módszerek egysoros hozzászólásokhoz, többsoros hozzászólásokhoz és blokkolási hozzászólásokhoz
Következő:A PowerShell a WebClient-t használja fájlok letöltésére
Közzétéve 2017. 04. 26. 14:35:44 |
132432423432423
Közzétéve 2019. 04. 16. 17:14:12 |
2222222222222
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com