Powershell Register-ObjectEvent
PSEventArgs Properties
# - get webclient
$webClient = new-object net.webclient
# - register event handler for DownloadStringCompleted event
# action script block is event handler code, show string DownloadStringCompletedEventArgs.Result
register-objectEvent $webClient downloadStringCompleted e1 {write-host $args[1].result} #positional input params
# - begin asynchronous download string
# event handlers will execute when download is complete
$webClient.downloadStringAsync("http://www.expressionsoftware.com")
# - list event subscriptions
get-eventSubscriber #output #SubscriptionId : 1
#SourceObject : System.Net.WebClient
#EventName : downloadStringCompleted
#SourceIdentifier: e1
#Action : System.Management.Automation.PSEventJob
#SupportEvent : False
#ForwardEvent : False
#HandlerDelegate :
# - list jobs
get-job | fl #output #Id : 1
#Name : e1
#Command : write-host $args[1].result
#State : Running
#JobStateInfo : Running
#HasMoreData : True
#Finished : System.Threading.ManualResetEvent
#InstanceId : 010f31f4-e8d2-4742-a782-79057faefebf
#Module : __DynamicModule_a48149c1-5a56-4172-bc68-473ec7c83119
#StatusMessage: #Location
#ChildJobs : {} #Output, Error, Progress, Verbose, Debug, Warning
# - register another handler, multiple event handlers supported, named input params
register-objectEvent -inputObject $webClient `
-eventName downloadStringCompleted `
-sourceIdentifier e2 `
-action {write-host ("async event at {0}`nevent handler source identifier: {1}`n{2}" -f ($event.timeGenerated.tostring("HH:mm:ss")), $event.sourceIdentifier, $args[1].result)}
# - unregister events
unregister-event -subscriptionId 1
unregister-event -sourceIdentifier e2
get-eventsubscriber -force | unregister-event -force #unregister all events
# - synchronous download string
$webClient.downloadString("http://www.expressionsoftware.com")Powershell asynchronous download file with WebClient DownloadFileAsync