Today we take a look at the final member of an object,
Events. Events are something that I use mostly if I need to put a graphical
interface on top of my PowerShell code. You can also use them in your non-graphical
PowerShell solutions. An event is generated when something happens to an
object. So Properties describe an object. Methods are actions the object can
take. Events are when something happens
to the object. Let’s take a look at the member
information for a Process Object and focus on the events.
PS C:\> Get-Process
| Get-Member -MemberType Event
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Disposed Event System.EventHandler Disposed(System.Object,
System.EventArgs)
ErrorDataReceived Event
System.Diagnostics.DataReceivedEventHandler
ErrorDataReceived(System.Object, System.Di...
Exited Event System.EventHandler Exited(System.Object,
System.EventArgs)
OutputDataReceived
Event
System.Diagnostics.DataReceivedEventHandler
OutputDataReceived(System.Object, System.D...
We can see that there is an event called Exited.
We are going to subscribe to the Exited
event of a process object. Here is what the MSDN documentation on
System.Diagnostic.Process says about its events.
Go ahead an open an instance of Notepad.
PS C:\> Start-Process -FilePath Notepad
Save the instance of the Notepad process in a variable for
easy reference.
PS C:\> $Proc = Get-Process -Name notepad
Now subscribe to your objects event. (I used the backtick
character at the end of the first 2 lines to be careful not to miss it.)
PS C:\>
Register-ObjectEvent -InputObject $Proc `
-EventName exited `
-SourceIdentifier notepad
`
-Action {Write-Host
"Process ended" -BackgroundColor DarkRed}
Id Name PSJobTypeName State
HasMoreData Location Command
-- ---- ------------- -----
----------- -------- -------
60 notepad NotStarted False Write-Host "Process
en...
We placed an action to take when this process ends. It will display “Process ended” with a dark
red background. We can see that this is
a background job.
PS C:\> Get-Job
Id Name PSJobTypeName State
HasMoreData Location Command
-- ---- ------------- -----
----------- -------- -------
60 notepad NotStarted False Write-Host "Process
en...
We can also see the event that we are currently subscribed
to.
PS C:\>
Get-EventSubscriber -SourceIdentifier Notepad
SubscriptionId : 8
SourceObject : System.Diagnostics.Process (notepad)
EventName : exited
SourceIdentifier :
notepad
Action : System.Management.Automation.PSEventJob
HandlerDelegate :
SupportEvent : False
ForwardEvent : False
Go ahead and stop the Notepad process.
PS C:\> Stop-Process
-Name notepad
Process ended
You can see that our action executed.
Even though the process is closed and no longer exists, you
are still subscribed to it.
PS C:\>
Get-EventSubscriber
SubscriptionId : 8
SourceObject : System.Diagnostics.Process (notepad)
EventName : exited
SourceIdentifier :
notepad
Action :
System.Management.Automation.PSEventJob
HandlerDelegate :
SupportEvent : False
ForwardEvent : False
You can unsubscribe to it.
PS C:\> Get-EventSubscriber -SourceIdentifier Notepad |
Unregister-Event
That is how we subscribe to events in PowerShell. Tomorrow, I’m going to show you how to do use
events with SAPIEN PowerShell Studio.
You can get a trial version from here (https://www.sapien.com/software/powershell_studio)
. Just click on the Try It link on the right.
Comments