Előfordulnak olyan helyzetek, amikor a szkriptünknek valamilyen eseményre kellene reagálnia: eltelik valamennyi idő, létrejön egy új meghajtó, beesik egy speciális eseménynapló-bejegyzés, új fájl vagy könyvtár jön létre egy mappában, stb. Ilyen helyzetekben készíthetünk egy ciklust, ami az esemény bekövetkezéséig fut, és periodikusan ellenőrzi, hogy az esemény bekövetkezett-e. Ez nem annyira profi megoldás, mert nehéz eldönteni, hogy milyen rendszerességgel ellenőrizzük az esemény bekövetkeztét? Ha túl gyakran ellenőrizzük, akkor szegény számítógépünk értékes processzorteljesítményét erre pazaroljuk. Ha túl ritkásan, akkor meg esetleg túl sokára reagálunk az eseményre. A profi megoldás az, hogy felhasználjuk a Windows eseménykezelő rendszerét, merthogy az egész Windows működésének alapja az eseménykezelés: a kattintások, billentyűleütések mind-mind eseményeket generálnak, amelyeket az egyes ablakok lekezelnek. Szerencsére ehhez az infrastruktúrához a PowerShell 2.0-ban már hozzáférünk.
A PowerShell 2.0-ban háromfajta eseményre tudunk reagálni: EngineEvent, ObjectEvent és WMIEvent. A reagálás akkor történhet meg, ha előtte „előfizetünk” valamely eseményre. De nézzük ezeket egyesével!