&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Articles from November 2026 on PowerShell.org - Welcome Automaters!</title><link>https://powershell.org/articles/2026/11/</link><description>Recent content in Articles from November 2026 on PowerShell.org - Welcome Automaters!</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://powershell.org/articles/2026/11/index.xml" rel="self" type="application/rss+xml"/><item><title>Find What Wakes a Windows PC With Get-WinEvent</title><link>https://powershell.org/articles/2026/11/find-what-wakes-a-windows-pc-with-get-winevent/</link><guid>https://powershell.org/articles/2026/11/find-what-wakes-a-windows-pc-with-get-winevent/</guid><pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate><description>&lt;p&gt;A PC that turns itself on at night leaves a record in the System log every time it does. Windows writes one event when the PC goes to sleep and another when it wakes up. The wake event names the device or timer that woke it.&lt;/p&gt;
&lt;p&gt;This article builds &lt;code&gt;Get-SleepWakeHistory&lt;/code&gt;, a function that reads those two events with &lt;code&gt;Get-WinEvent&lt;/code&gt;, pairs each sleep with its corresponding wake, and returns one row per sleep with how long the PC slept, why it went to sleep, and what woke it. It then lists the two things Windows allows to wake a PC on its own, scheduled tasks with &amp;ldquo;Wake the computer to run this task&amp;rdquo; turned on and devices that are armed to wake it.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>A PC that turns itself on at night leaves a record in the System log every time it does. Windows writes one event when the PC goes to sleep and another when it wakes up. The wake event names the device or timer that woke it.</p><p>This article builds<code>Get-SleepWakeHistory</code>, a function that reads those two events with<code>Get-WinEvent</code>, pairs each sleep with its corresponding wake, and returns one row per sleep with how long the PC slept, why it went to sleep, and what woke it. It then lists the two things Windows allows to wake a PC on its own, scheduled tasks with &ldquo;Wake the computer to run this task&rdquo; turned on and devices that are armed to wake it.</p><p>Everything here was run with Windows PowerShell 5.1 and PowerShell 7.6 on Windows 11 builds 26200 and 26300.</p><h2 id="the-two-events" class="ps-heading">The two events<a class="ps-heading-anchor" href="#the-two-events" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Windows records a sleep and a wake as two separate events in the System log.</p><ul><li><strong>Event 42</strong> from<code>Microsoft-Windows-Kernel-Power</code> is written as the PC enters sleep. Its<code>Reason</code> field says what started the sleep.</li><li><strong>Event 1</strong> from<code>Microsoft-Windows-Power-Troubleshooter</code> is written after the PC resumes. It carries the time the PC went to sleep, the time it woke, and the wake source as text.</li></ul><p>You can see both in Event Viewer, but the wake source is only in the message text there. The fields are easier to read from the event XML, where each value has a name.</p><p>You don&rsquo;t need a sleep in the log to find the event names. The provider&rsquo;s manifest lists every field of every event version, and can be read with<code>Get-WinEvent -ListProvider</code>.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#79c0ff">$e</span> = (Get-WinEvent -ListProvider Microsoft-Windows-Power-Troubleshooter).<span style="color:#79c0ff">Events</span> |</span></span><span style="display:flex;"><span> Where-Object Id<span style="color:#ff7b72;font-weight:bold">-eq</span><span style="color:#a5d6ff">1</span> |</span></span><span style="display:flex;"><span> Sort-Object Version |</span></span><span style="display:flex;"><span> Select-Object -Last<span style="color:#a5d6ff">1</span></span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#a5d6ff">'Version '</span> +<span style="color:#79c0ff">$e</span>.<span style="color:#79c0ff">Version</span></span></span><span style="display:flex;"><span>([<span style="color:#79c0ff;font-weight:bold">xml</span>]<span style="color:#79c0ff">$e</span>.Template).<span style="color:#79c0ff">template</span>.<span style="color:#79c0ff">data</span>.<span style="color:#79c0ff">name</span> -join<span style="color:#a5d6ff">', '</span></span></span></code></pre></td></tr></table></div></div><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Version 3</span></span><span style="display:flex;"><span>SleepTime, WakeTime, SleepDuration, WakeDuration, DriverInitDuration, BiosInitDuration, HiberWriteDuration, HiberReadDuration, HiberPagesWritten, Attributes, TargetState, EffectiveState, WakeSourceType, WakeSourceTextLength, WakeSourceText, WakeTimerOwnerLength, WakeTimerContextLength, NoMultiStageResumeReason, WakeTimerOwner, WakeTimerContext, CheckpointDuration</span></span></code></pre></td></tr></table></div></div><p><code>SleepTime</code> and<code>WakeTime</code> are UTC timestamps.<code>WakeSourceText</code> holds the same text Event Viewer shows after &ldquo;Wake Source&rdquo;.<code>WakeTimerOwner</code> arrived in version 1 of the event and names the process or task that set the timer when a timer caused the wake.</p><p>Run the manifest command with<code>Microsoft-Windows-Kernel-Power</code> and<code>42</code> to see that<code>Reason</code> was added to event 42 in version 2. A version 0 event 42 carries only<code>TargetState</code> and<code>EffectiveState</code>, so the function treats a missing<code>Reason</code> as unknown.</p><h2 id="the-function" class="ps-heading">The function<a class="ps-heading-anchor" href="#the-function" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 10</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 11</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 12</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 13</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 14</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 15</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 16</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 17</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 18</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 19</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 20</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 21</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 22</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 23</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 24</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 25</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 26</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 27</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 28</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 29</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 30</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 31</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 32</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 33</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 34</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 35</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 36</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 37</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 38</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 39</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 40</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 41</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 42</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 43</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 44</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 45</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 46</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 47</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 48</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 49</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 50</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 51</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 52</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 53</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 54</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 55</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 56</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 57</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 58</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 59</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 60</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 61</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 62</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 63</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 64</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 65</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 66</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 67</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 68</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 69</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 70</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 71</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 72</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 73</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 74</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 75</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 76</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 77</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 78</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 79</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 80</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 81</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 82</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 83</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 84</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 85</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 86</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 87</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 88</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 89</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 90</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 91</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 92</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 93</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 94</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 95</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 96</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 97</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 98</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 99</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">100</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">101</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">102</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">103</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">104</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">105</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">106</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">107</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">108</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">109</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#ff7b72">function</span><span style="color:#6e7681"/>Get-SleepWakeHistory {</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic">&lt;#</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> .</span><span style="color:#a5d6ff">SYNOPSIS</span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> Lists each sleep and wake on a Windows PC with the sleep reason and the wake source.</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> .</span><span style="color:#a5d6ff">DESCRIPTION</span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> Reads Kernel-Power event 42 (entering sleep) and Power-Troubleshooter event 1</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> (resumed from sleep) from the System log, pairs each wake with its corresponding</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> sleep event, and returns one object per sleep.</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> .PARAMETER Days</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> How many days back to read.</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> .PARAMETER ComputerName</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> The computer to read. Reading a remote computer's log needs the Remote Event Log</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> Management firewall rules enabled on that computer.</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> .</span><span style="color:#a5d6ff">EXAMPLE</span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> Get-SleepWakeHistory -Days 14 | Format-Table -AutoSize</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> .</span><span style="color:#a5d6ff">EXAMPLE</span><span style="color:#8b949e;font-style:italic"/></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> Get-SleepWakeHistory | Where-Object WakeSource -notmatch 'Power Button'</span></span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"> #&gt;</span></span></span><span style="display:flex;"><span> [CmdletBinding()]</span></span><span style="display:flex;"><span> [OutputType([<span style="color:#79c0ff;font-weight:bold">pscustomobject</span>])]</span></span><span style="display:flex;"><span><span style="color:#ff7b72">param</span>(</span></span><span style="display:flex;"><span> [ValidateRange(<span style="color:#a5d6ff">1</span>,<span style="color:#a5d6ff">365</span>)]</span></span><span style="display:flex;"><span> [<span style="color:#79c0ff;font-weight:bold">int</span>]<span style="color:#79c0ff">$Days</span> =<span style="color:#a5d6ff">7</span>,</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span> [<span style="color:#79c0ff;font-weight:bold">string</span>]<span style="color:#79c0ff">$ComputerName</span> =<span style="color:#79c0ff">$env:COMPUTERNAME</span></span></span><span style="display:flex;"><span> )</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Reason codes on Kernel-Power event 42.</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$sleepReasons</span> =<span style="color:#79c0ff">@</span>{</span></span><span style="display:flex;"><span><span style="color:#a5d6ff">0</span> =<span style="color:#a5d6ff">'Button or lid'</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2</span> =<span style="color:#a5d6ff">'Battery'</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4</span> =<span style="color:#a5d6ff">'Application API'</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">6</span> =<span style="color:#a5d6ff">'Hibernate from sleep (fixed timeout)'</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">7</span> =<span style="color:#a5d6ff">'System idle'</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">13</span> =<span style="color:#a5d6ff">'Hibernate from sleep (standby battery budget exceeded)'</span></span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Turns an event's EventData into a hashtable keyed by field name.</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$readData</span> = {</span></span><span style="display:flex;"><span><span style="color:#ff7b72">param</span>(<span style="color:#79c0ff">$Record</span>)</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$data</span> =<span style="color:#79c0ff">@</span>{}</span></span><span style="display:flex;"><span><span style="color:#ff7b72">foreach</span> (<span style="color:#79c0ff">$field</span><span style="color:#ff7b72">in</span> ([<span style="color:#79c0ff;font-weight:bold">xml</span>]<span style="color:#79c0ff">$Record</span>.<span style="color:#79c0ff">ToXml</span>()).<span style="color:#79c0ff">Event</span>.<span style="color:#79c0ff">EventData</span>.Data) {</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$data</span>[<span style="color:#79c0ff">$field</span>.Name] =<span style="color:#79c0ff">$field</span>.<span style="color:#a5d6ff">'#text'</span></span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$data</span></span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#79c0ff">$since</span> = (Get-Date).<span style="color:#79c0ff">AddDays</span>(-<span style="color:#79c0ff">$Days</span>)</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$filter</span> =<span style="color:#79c0ff">@</span>(</span></span><span style="display:flex;"><span><span style="color:#79c0ff">@</span>{ LogName =<span style="color:#a5d6ff">'System'</span>; ProviderName =<span style="color:#a5d6ff">'Microsoft-Windows-Kernel-Power'</span>; Id =<span style="color:#a5d6ff">42</span>; StartTime =<span style="color:#79c0ff">$since</span> }</span></span><span style="display:flex;"><span><span style="color:#79c0ff">@</span>{ LogName =<span style="color:#a5d6ff">'System'</span>; ProviderName =<span style="color:#a5d6ff">'Microsoft-Windows-Power-Troubleshooter'</span>; Id =<span style="color:#a5d6ff">1</span>; StartTime =<span style="color:#79c0ff">$since</span> }</span></span><span style="display:flex;"><span> )</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#ff7b72">try</span> {</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$events</span> = Get-WinEvent -FilterHashtable<span style="color:#79c0ff">$filter</span> -ComputerName<span style="color:#79c0ff">$ComputerName</span> -ErrorAction Stop</span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span><span style="color:#ff7b72">catch</span> {</span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> (<span style="color:#79c0ff">$_</span>.<span style="color:#79c0ff">FullyQualifiedErrorId</span><span style="color:#ff7b72;font-weight:bold">-like</span><span style="color:#a5d6ff">'NoMatchingEventsFound*'</span>) {</span></span><span style="display:flex;"><span> Write-Verbose<span style="color:#a5d6ff">"No sleep or wake events on</span><span style="color:#79c0ff">$ComputerName</span><span style="color:#a5d6ff"> in the last</span><span style="color:#79c0ff">$Days</span><span style="color:#a5d6ff"> days."</span></span></span><span style="display:flex;"><span><span style="color:#ff7b72">return</span></span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span><span style="color:#ff7b72">throw</span></span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#79c0ff">$sleeps</span> =<span style="color:#79c0ff">@</span>(<span style="color:#79c0ff">$events</span> | Where-Object Id<span style="color:#ff7b72;font-weight:bold">-eq</span><span style="color:#a5d6ff">42</span> | Sort-Object TimeCreated)</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$wakes</span> =<span style="color:#79c0ff">@</span>(<span style="color:#79c0ff">$events</span> | Where-Object Id<span style="color:#ff7b72;font-weight:bold">-eq</span><span style="color:#a5d6ff">1</span> | Sort-Object TimeCreated)</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#ff7b72">foreach</span> (<span style="color:#79c0ff">$wake</span><span style="color:#ff7b72">in</span><span style="color:#79c0ff">$wakes</span>) {</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$w</span> = &amp;<span style="color:#79c0ff">$readData</span><span style="color:#79c0ff">$wake</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$sleptAt</span> = [<span style="color:#79c0ff;font-weight:bold">datetimeoffset</span>]::Parse(<span style="color:#79c0ff">$w</span>.SleepTime).<span style="color:#79c0ff">LocalDateTime</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$wokeAt</span> = [<span style="color:#79c0ff;font-weight:bold">datetimeoffset</span>]::Parse(<span style="color:#79c0ff">$w</span>.WakeTime).<span style="color:#79c0ff">LocalDateTime</span></span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Event 42 is written within seconds of the SleepTime that event 1 records, so take the closest one.</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$entry</span> =<span style="color:#79c0ff">$sleeps</span> |</span></span><span style="display:flex;"><span> Where-Object {<span style="color:#79c0ff">$_</span>.<span style="color:#79c0ff">TimeCreated</span><span style="color:#ff7b72;font-weight:bold">-ge</span><span style="color:#79c0ff">$sleptAt</span>.<span style="color:#79c0ff">AddMinutes</span>(<span style="color:#a5d6ff">-2</span>)<span style="color:#ff7b72;font-weight:bold">-and</span><span style="color:#79c0ff">$_</span>.<span style="color:#79c0ff">TimeCreated</span><span style="color:#ff7b72;font-weight:bold">-le</span><span style="color:#79c0ff">$sleptAt</span>.<span style="color:#79c0ff">AddMinutes</span>(<span style="color:#a5d6ff">1</span>) } |</span></span><span style="display:flex;"><span> Sort-Object { [<span style="color:#79c0ff;font-weight:bold">math</span>]::Abs((<span style="color:#79c0ff">$_</span>.<span style="color:#79c0ff">TimeCreated</span> -<span style="color:#79c0ff">$sleptAt</span>).TotalSeconds) } |</span></span><span style="display:flex;"><span> Select-Object -First<span style="color:#a5d6ff">1</span></span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#79c0ff">$reason</span> =<span style="color:#a5d6ff">'No event 42 found'</span></span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> (<span style="color:#79c0ff">$entry</span>) {</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$raw</span> = (&amp;<span style="color:#79c0ff">$readData</span><span style="color:#79c0ff">$entry</span>).<span style="color:#79c0ff">Reason</span></span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> (<span style="color:#79c0ff">$null</span><span style="color:#ff7b72;font-weight:bold">-eq</span><span style="color:#79c0ff">$raw</span>) {</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$reason</span> =<span style="color:#a5d6ff">'Unknown'</span></span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span><span style="color:#ff7b72">else</span> {</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$code</span> = [<span style="color:#79c0ff;font-weight:bold">int</span>]<span style="color:#79c0ff">$raw</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$reason</span> =<span style="color:#ff7b72">if</span> (<span style="color:#79c0ff">$sleepReasons</span>.<span style="color:#79c0ff">ContainsKey</span>(<span style="color:#79c0ff">$code</span>)) {<span style="color:#79c0ff">$sleepReasons</span>[<span style="color:#79c0ff">$code</span>] }<span style="color:#ff7b72">else</span> {<span style="color:#a5d6ff">"Code</span><span style="color:#79c0ff">$code</span><span style="color:#a5d6ff">"</span> }</span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#79c0ff">$source</span> =<span style="color:#79c0ff">$w</span>.<span style="color:#79c0ff">WakeSourceText</span></span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> ([<span style="color:#79c0ff;font-weight:bold">string</span>]::IsNullOrWhiteSpace(<span style="color:#79c0ff">$source</span>)) {<span style="color:#79c0ff">$source</span> =<span style="color:#a5d6ff">'Unknown'</span> }</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span> [<span style="color:#79c0ff;font-weight:bold">pscustomobject</span>]<span style="color:#79c0ff">@</span>{</span></span><span style="display:flex;"><span> ComputerName =<span style="color:#79c0ff">$ComputerName</span></span></span><span style="display:flex;"><span> Slept =<span style="color:#79c0ff">$sleptAt</span></span></span><span style="display:flex;"><span> Woke =<span style="color:#79c0ff">$wokeAt</span></span></span><span style="display:flex;"><span> Asleep = [<span style="color:#79c0ff;font-weight:bold">datetimeoffset</span>]::Parse(<span style="color:#79c0ff">$w</span>.WakeTime) - [<span style="color:#79c0ff;font-weight:bold">datetimeoffset</span>]::Parse(<span style="color:#79c0ff">$w</span>.SleepTime)</span></span><span style="display:flex;"><span> SleepReason =<span style="color:#79c0ff">$reason</span></span></span><span style="display:flex;"><span> WakeSource =<span style="color:#79c0ff">$source</span></span></span><span style="display:flex;"><span> WakeTimer =<span style="color:#79c0ff">$w</span>.<span style="color:#79c0ff">WakeTimerOwner</span></span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span> }</span></span><span style="display:flex;"><span>}</span></span></code></pre></td></tr></table></div></div><p>The function only uses cmdlets and syntax that work in both Windows PowerShell 5.1 and PowerShell 7, since 5.1 is still the shell on most of the PCs that raise these tickets.</p><h2 id="running-it" class="ps-heading">Running it<a class="ps-heading-anchor" href="#running-it" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>Get-SleepWakeHistory</span></span></code></pre></td></tr></table></div></div><p>On a laptop this returned two sleeps for the last 7 days.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">15</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>ComputerName : LAPTOP</span></span><span style="display:flex;"><span>Slept : 10/30/2026 11:46:51 AM</span></span><span style="display:flex;"><span>Woke : 10/31/2026 7:30:54 PM</span></span><span style="display:flex;"><span>Asleep : 1.07:44:03.2633699</span></span><span style="display:flex;"><span>SleepReason : Hibernate from sleep (standby battery budget exceeded)</span></span><span style="display:flex;"><span>WakeSource : Unknown</span></span><span style="display:flex;"><span>WakeTimer :</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>ComputerName : LAPTOP</span></span><span style="display:flex;"><span>Slept : 11/1/2026 4:55:49 PM</span></span><span style="display:flex;"><span>Woke : 11/2/2026 7:11:14 AM</span></span><span style="display:flex;"><span>Asleep : 14:15:25.4508261</span></span><span style="display:flex;"><span>SleepReason : Battery</span></span><span style="display:flex;"><span>WakeSource : Unknown</span></span><span style="display:flex;"><span>WakeTimer :</span></span></code></pre></td></tr></table></div></div><p>In both rows event 42 was written 1 to 5 seconds after the<code>SleepTime</code> in event 1. Across 20 sleeps on that laptop the gap was never more than 13 seconds, which is why the function looks 2 minutes back and 1 minute forward. When two event 42s fall in that window, as they can after a very short sleep, it takes the one closest to the<code>SleepTime</code>.</p><p>A wake you caused shows the power button, the lid, or the device you touched as the source. The rows to look at are the ones that happened when nobody was at the PC. For those, the wake source is usually a timer, which points at a scheduled task, or a device such as a network adapter or a mouse.</p><p>A timer wake names the task. On the laptop, with the test task from the next section set to run four minutes after it went to sleep, the function returned this.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>ComputerName : LAPTOP</span></span><span style="display:flex;"><span>Slept : 11/3/2026 7:59:43 AM</span></span><span style="display:flex;"><span>Woke : 11/3/2026 8:03:24 AM</span></span><span style="display:flex;"><span>Asleep : 00:03:40.8647018</span></span><span style="display:flex;"><span>SleepReason : Application API</span></span><span style="display:flex;"><span>WakeSource : Windows will execute 'NT TASK\WakeTest' scheduled task that requested waking the computer.</span></span><span style="display:flex;"><span>WakeTimer : \Device\HarddiskVolume3\Windows\System32\svchost.exe</span></span></code></pre></td></tr></table></div></div><p><code>WakeTimer</code> names the process that set the timer, which for every scheduled task is the Task Scheduler&rsquo;s own<code>svchost.exe</code>. The task name is in<code>WakeSource</code>.</p><p>A device wake often names the port the device sits behind instead of the device. On a desktop woken from the keyboard, the function returned this.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>ComputerName : DESKTOP</span></span><span style="display:flex;"><span>Slept : 11/3/2026 7:28:41 AM</span></span><span style="display:flex;"><span>Woke : 11/3/2026 7:28:55 AM</span></span><span style="display:flex;"><span>Asleep : 00:00:14.4626736</span></span><span style="display:flex;"><span>SleepReason : Application API</span></span><span style="display:flex;"><span>WakeSource : PCI Express Root Port</span></span><span style="display:flex;"><span>WakeTimer :</span></span></code></pre></td></tr></table></div></div><p>The same wake, with the device&rsquo;s instance path, can be read with<code>powercfg /lastwake</code>. Look the path up in Device Manager under &ldquo;Details&rdquo;, &ldquo;Device instance path&rdquo;.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">9</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Wake History Count - 1</span></span><span style="display:flex;"><span>Wake History [0]</span></span><span style="display:flex;"><span> Wake Source Count - 1</span></span><span style="display:flex;"><span> Wake Source [0]</span></span><span style="display:flex;"><span> Type: Device</span></span><span style="display:flex;"><span> Instance Path: PCI\VEN_1022&amp;DEV_14DB&amp;SUBSYS_14531022&amp;REV_00\3&amp;11583659&amp;0&amp;11</span></span><span style="display:flex;"><span> Friendly Name:</span></span><span style="display:flex;"><span> Description: PCI Express Root Port</span></span><span style="display:flex;"><span> Manufacturer: (Standard system devices)</span></span></code></pre></td></tr></table></div></div><p>When<code>WakeSource</code> says<code>Unknown</code>, run<code>powercfg /lastwake</code> right after the next unexpected wake. Its output comes directly from the power manager and sometimes names a device the event left blank.</p><h2 id="which-tasks-and-devices-can-wake-the-pc" class="ps-heading">Which tasks and devices can wake the PC<a class="ps-heading-anchor" href="#which-tasks-and-devices-can-wake-the-pc" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>A wake from a timer comes from a scheduled task that has &ldquo;Wake the computer to run this task&rdquo; checked. That checkbox is<code>Settings.WakeToRun</code> on the task object.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>Get-ScheduledTask |</span></span><span style="display:flex;"><span> Where-Object {<span style="color:#79c0ff">$_</span>.<span style="color:#79c0ff">Settings</span>.<span style="color:#79c0ff">WakeToRun</span> } |</span></span><span style="display:flex;"><span> Select-Object TaskPath, TaskName, State</span></span></code></pre></td></tr></table></div></div><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>TaskPath TaskName State</span></span><span style="display:flex;"><span>-------- -------- -----</span></span><span style="display:flex;"><span>\Microsoft\Windows\.NET Framework\ .NET Framework NGEN v4.0.30319 64 Critical Disabled</span></span><span style="display:flex;"><span>\Microsoft\Windows\.NET Framework\ .NET Framework NGEN v4.0.30319 Critical Disabled</span></span><span style="display:flex;"><span>\Microsoft\Windows\InstallService\ WakeUpAndContinueUpdates Disabled</span></span><span style="display:flex;"><span>\Microsoft\Windows\InstallService\ WakeUpAndScanForUpdates Disabled</span></span><span style="display:flex;"><span>\Microsoft\Windows\SharedPC\ Account Cleanup Disabled</span></span><span style="display:flex;"><span>\Microsoft\Windows\UpdateOrchestrator\ Schedule Wake To Work Disabled</span></span></code></pre></td></tr></table></div></div><p>The list includes disabled tasks, which can&rsquo;t set a wake timer. Add<code>State -ne 'Disabled'</code> to the filter to see only the tasks that can wake the PC today. On this PC that leaves none, which matches<code>powercfg /waketimers</code> below.</p><p>Each timer that is set right now, with the task behind it, can be listed with<code>powercfg /waketimers</code> from an elevated prompt. With no wake tasks enabled, the output is one line.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>There are no active wake timers in the system.</span></span></code></pre></td></tr></table></div></div><p>To see what a real timer looks like, I registered a test task with &ldquo;Wake the computer to run this task&rdquo; turned on and a trigger four minutes out.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#79c0ff">$action</span> = New-ScheduledTaskAction -Execute<span style="color:#a5d6ff">'cmd.exe'</span> -Argument<span style="color:#a5d6ff">'/c echo woke &gt;&gt; C:\Windows\Temp\WakeTest.txt'</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$trigger</span> = New-ScheduledTaskTrigger -Once -At (Get-Date).<span style="color:#79c0ff">AddMinutes</span>(<span style="color:#a5d6ff">4</span>)</span></span><span style="display:flex;"><span><span style="color:#79c0ff">$settings</span> = New-ScheduledTaskSettingsSet -WakeToRun</span></span><span style="display:flex;"><span>Register-ScheduledTask -TaskName<span style="color:#a5d6ff">'WakeTest'</span> -Action<span style="color:#79c0ff">$action</span> -Trigger<span style="color:#79c0ff">$trigger</span> -Settings<span style="color:#79c0ff">$settings</span> -User<span style="color:#a5d6ff">'SYSTEM'</span></span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>powercfg /waketimers</span></span></code></pre></td></tr></table></div></div><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Timer set by [SERVICE] \Device\HarddiskVolume3\Windows\System32\svchost.exe (SystemEventsBroker) expires at 7:31:25 AM on 11/3/2026.</span></span><span style="display:flex;"><span> Reason: Windows will execute 'NT TASK\WakeTest' scheduled task that requested waking the computer.</span></span></code></pre></td></tr></table></div></div><p>The task name is in the<code>Reason</code> line.</p><p>A wake from a device comes from hardware that is armed to wake the PC. Every device with that permission can be listed with<code>powercfg /devicequery wake_armed</code>.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>powercfg /devicequery wake_armed</span></span></code></pre></td></tr></table></div></div><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">9</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>HID-compliant mouse</span></span><span style="display:flex;"><span>Realtek USB GbE Family Controller</span></span><span style="display:flex;"><span>USB4 Root Router (1.0)</span></span><span style="display:flex;"><span>HID Keyboard Device (004)</span></span><span style="display:flex;"><span>Realtek 8922AE WiFi 7 PCI-E NIC</span></span><span style="display:flex;"><span>Realtek Gaming 2.5GbE Family Controller</span></span><span style="display:flex;"><span>HID-compliant mouse (004)</span></span><span style="display:flex;"><span>HID Keyboard Device (009)</span></span><span style="display:flex;"><span>HID Keyboard Device (012)</span></span></code></pre></td></tr></table></div></div><p>Three network adapters on this PC are armed, so each of them can wake it from sleep.</p><h2 id="stopping-the-wake" class="ps-heading">Stopping the wake<a class="ps-heading-anchor" href="#stopping-the-wake" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Match the<code>WakeSource</code> from the function to one of the two lists above, then turn off that one permission.</p><p>For a scheduled task, turn off<code>WakeToRun</code> and save the task.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#79c0ff">$task</span> = Get-ScheduledTask -TaskName<span style="color:#a5d6ff">'WakeTest'</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$task</span>.<span style="color:#79c0ff">Settings</span>.<span style="color:#79c0ff">WakeToRun</span> =<span style="color:#79c0ff">$false</span></span></span><span style="display:flex;"><span><span style="color:#79c0ff">$task</span> | Set-ScheduledTask | Out-Null</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>(Get-ScheduledTask -TaskName<span style="color:#a5d6ff">'WakeTest'</span>).<span style="color:#79c0ff">Settings</span>.<span style="color:#79c0ff">WakeToRun</span></span></span></code></pre></td></tr></table></div></div><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>False</span></span></code></pre></td></tr></table></div></div><p>For a device, remove its permission by the name<code>powercfg</code> printed.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#79c0ff">$device</span> =<span style="color:#a5d6ff">'Realtek 8922AE WiFi 7 PCI-E NIC'</span></span></span><span style="display:flex;"><span>powercfg /devicedisablewake<span style="color:#79c0ff">$device</span></span></span><span style="display:flex;"><span>(powercfg /devicequery wake_armed)<span style="color:#ff7b72;font-weight:bold">-contains</span><span style="color:#79c0ff">$device</span></span></span></code></pre></td></tr></table></div></div><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>False</span></span></code></pre></td></tr></table></div></div><p>The permission can be restored with<code>powercfg /deviceenablewake</code> and the same device name.</p><p>Run<code>Get-SleepWakeHistory</code> again after a night or two. The wakes from that task or device should be gone from the list.</p><h2 id="gotchas" class="ps-heading">Gotchas<a class="ps-heading-anchor" href="#gotchas" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><h3 id="modern-standby-pcs-log-most-sleeps-as-other-events" class="ps-heading">Modern Standby PCs log most sleeps as other events<a class="ps-heading-anchor" href="#modern-standby-pcs-log-most-sleeps-as-other-events" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Many newer laptops don&rsquo;t use S3 sleep. They use Modern Standby. On those laptops &ldquo;Standby (S0 Low Power Idle)&rdquo; is listed under the available sleep states in<code>powercfg /a</code>. The laptop above is one of them. In 30 days it logged 412 Kernel-Power 506 events (&ldquo;The system is entering Modern Standby&rdquo;) and 410 event 507s (&ldquo;The system is exiting Modern Standby&rdquo;), and only 20 pairs of events 42 and 1. Those 20 were hibernations and sleeps that an application started. Every one of the 20 event 1s showed &ldquo;Wake Source: Unknown&rdquo;.</p><p>On a Modern Standby PC, the<code>Reason</code> line in event 507 says why it left standby.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>Get-WinEvent -FilterHashtable<span style="color:#79c0ff">@</span>{</span></span><span style="display:flex;"><span> LogName =<span style="color:#a5d6ff">'System'</span></span></span><span style="display:flex;"><span> ProviderName =<span style="color:#a5d6ff">'Microsoft-Windows-Kernel-Power'</span></span></span><span style="display:flex;"><span> Id =<span style="color:#a5d6ff">507</span></span></span><span style="display:flex;"><span> StartTime = (Get-Date).<span style="color:#79c0ff">AddDays</span>(<span style="color:#a5d6ff">-7</span>)</span></span><span style="display:flex;"><span>} |</span></span><span style="display:flex;"><span> ForEach-Object { (<span style="color:#79c0ff">$_</span>.<span style="color:#79c0ff">Message</span> -split [<span style="color:#79c0ff;font-weight:bold">Environment</span>]::NewLine | Where-Object {<span style="color:#79c0ff">$_</span><span style="color:#ff7b72;font-weight:bold">-match</span><span style="color:#a5d6ff">'^Reason'</span> }) -join<span style="color:#a5d6ff">''</span> } |</span></span><span style="display:flex;"><span> Group-Object |</span></span><span style="display:flex;"><span> Sort-Object Count -Descending |</span></span><span style="display:flex;"><span> Select-Object Count, Name</span></span></code></pre></td></tr></table></div></div><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">9</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Count Name</span></span><span style="display:flex;"><span>----- ----</span></span><span style="display:flex;"><span> 19 Reason: Power Button.</span></span><span style="display:flex;"><span> 14 Reason: 16777220.</span></span><span style="display:flex;"><span> 5 Reason: Austerity Battery Drain Budget Exceeded.</span></span><span style="display:flex;"><span> 3 Reason: AC/DC Display Burst Suppressed.</span></span><span style="display:flex;"><span> 2 Reason: Resume from Hibernate.</span></span><span style="display:flex;"><span> 1 Reason: AC/DC Display Burst.</span></span><span style="display:flex;"><span> 1 Reason: Sleep, Hibernate, or Shutdown.</span></span></code></pre></td></tr></table></div></div><p>Some reasons print only as a number. An HTML report of the Modern Standby sessions, with the time and the top power users for each one, can be generated with<code>powercfg /sleepstudy</code>.</p><h3 id="no-events-is-an-error-not-an-empty-result" class="ps-heading">No events is an error, not an empty result<a class="ps-heading-anchor" href="#no-events-is-an-error-not-an-empty-result" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p><code>Get-WinEvent</code> throws &ldquo;No events were found that match the specified selection criteria&rdquo; when the filter matches nothing. The function catches that one error by its<code>FullyQualifiedErrorId</code> and returns nothing, so a PC that never slept in the window doesn&rsquo;t look like a failure. Any other error, such as access denied on a remote computer, still throws.</p><p>Run the function with<code>-Verbose</code> to see the XPath query<code>Get-WinEvent</code> builds from the two hashtables, which helps when a filter returns less than you expect.</p><h3 id="a-laptop-on-battery-may-ignore-the-timer-or-wake-and-skip-the-task" class="ps-heading">A laptop on battery may ignore the timer, or wake and skip the task<a class="ps-heading-anchor" href="#a-laptop-on-battery-may-ignore-the-timer-or-wake-and-skip-the-task" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>The power plan&rsquo;s &ldquo;Allow wake timers&rdquo; setting has separate values for plugged in and on battery. On the Modern Standby laptop used for this article, it was &ldquo;Important Wake Timers Only&rdquo; plugged in and &ldquo;Disable&rdquo; on battery.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>powercfg /q SCHEME_CURRENT SUB_SLEEP RTCWAKE</span></span></code></pre></td></tr></table></div></div><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span> Current AC Power Setting Index: 0x00000002</span></span><span style="display:flex;"><span> Current DC Power Setting Index: 0x00000000</span></span></code></pre></td></tr></table></div></div><p>Index 0 is Disable, 1 is Enable, and 2 is Important Wake Timers Only. With the battery value at 0, a task&rsquo;s timer can&rsquo;t wake the laptop on battery, so for the test I set it to 1.</p><p>Once it woke, the task still didn&rsquo;t run.<code>Get-ScheduledTaskInfo</code> reported a<code>LastTaskResult</code> of 267011 (the task has not yet run), because<code>New-ScheduledTaskSettingsSet</code> leaves<code>DisallowStartIfOnBatteries</code> set to<code>True</code>. So a laptop can wake on battery for a task that then doesn&rsquo;t run, which looks like a wake for no reason. Check<code>WakeToRun</code> and the two battery settings on the task you found.</p><div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2</span></code></pre></td><td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>(Get-ScheduledTask -TaskName<span style="color:#a5d6ff">'WakeTest'</span>).<span style="color:#79c0ff">Settings</span> |</span></span><span style="display:flex;"><span> Select-Object WakeToRun, DisallowStartIfOnBatteries, StopIfGoingOnBatteries</span></span></code></pre></td></tr></table></div></div><h3 id="hibernation-counts-from-the-moment-the-pc-hibernated" class="ps-heading">Hibernation counts from the moment the PC hibernated<a class="ps-heading-anchor" href="#hibernation-counts-from-the-moment-the-pc-hibernated" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>When a PC hibernates after a stretch in standby, event 42 carries reason 6 (&ldquo;Hibernate from Sleep - Fixed Timeout&rdquo;) or reason 13 (&ldquo;Hibernate from Sleep - Standby Battery Budget Exceeded&rdquo;). The<code>SleepTime</code> in the corresponding event 1 is the time it went into hibernation, not the time it first went to sleep. On a Modern Standby laptop, the hours it spent in standby before the hibernation are only in events 506 and 507, so<code>Asleep</code> covers the hibernation alone.</p><h2 id="references" class="ps-heading">References<a class="ps-heading-anchor" href="#references" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><ul><li><a href="https://learn.microsoft.com/powershell/module/microsoft.powershell.diagnostics/get-winevent">Get-WinEvent</a></li><li><a href="https://learn.microsoft.com/windows-hardware/design/device-experiences/powercfg-command-line-options">Powercfg command-line options</a></li><li><a href="https://learn.microsoft.com/powershell/module/scheduledtasks/get-scheduledtask">Get-ScheduledTask</a></li><li><a href="https://www.powershellgallery.com/packages/SecurityFever/3.2.0/Content/Functions%5CSystemAudit%5CGet-SystemAuditPowerCycle.ps1">Get-SystemAuditPowerCycle in the SecurityFever module</a>, the source of the event 42 reason codes 0 and 7</li></ul>
]]></content:encoded></item></channel></rss>