<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jack Scott</title>
    <description>The latest articles on Forem by Jack Scott (@jackscott7).</description>
    <link>https://forem.com/jackscott7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446820%2Fe7e2790e-aaaf-41f6-a892-7509a7f907bc.jpg</url>
      <title>Forem: Jack Scott</title>
      <link>https://forem.com/jackscott7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jackscott7"/>
    <language>en</language>
    <item>
      <title>Get Notified When Long-Running Commands Finish in PowerShell 7</title>
      <dc:creator>Jack Scott</dc:creator>
      <pubDate>Wed, 07 Jan 2026 01:10:27 +0000</pubDate>
      <link>https://forem.com/jackscott7/command-exec-notification-in-powershell-7-4gbn</link>
      <guid>https://forem.com/jackscott7/command-exec-notification-in-powershell-7-4gbn</guid>
      <description>&lt;p&gt;Hey there.&lt;br&gt;
I'm gonna give a simple trick to make your life easier when running time consuming commands in &lt;strong&gt;PowerShell 7&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So a while back I installed &lt;strong&gt;Arch Linux&lt;/strong&gt; to see what the hype was about, I opened Konsole and noticed a notification pop up when the command I ran finished.&lt;/p&gt;

&lt;p&gt;After a while I reinstalled Windows, and wanted to make that notification functionality work in &lt;strong&gt;PS7&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  How this works?
&lt;/h3&gt;

&lt;p&gt;This works by recording a timestamp when Enter is pressed and comparing it when PowerShell renders the next prompt. If execution time exceeds a threshold, a Windows toast notification is triggered. That's it.&lt;/p&gt;

&lt;p&gt;If you’re hooked, Let’s make this happen.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 1
&lt;/h2&gt;

&lt;p&gt;Install PS7 module by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Install-Module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;BurntToast&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2
&lt;/h2&gt;

&lt;p&gt;Run the following in PS7 to get the PS7 Profile path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$PROFILE&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;C:\Users\&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;\Documents\PowerShell\Microsoft.PowerShell_profile.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3
&lt;/h2&gt;

&lt;p&gt;Open your profile in VS Code or whatever editor you use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$PROFILE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4
&lt;/h2&gt;

&lt;p&gt;Import the Module you just installed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Import-Module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;BurntToast&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This should always be at the top, otherwise the next steps won't work&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 5
&lt;/h2&gt;

&lt;p&gt;Copy and Paste this code at the top of your profile after importing the module&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$OriginalPrompt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Get-Command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ScriptBlock&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# capture original prompt&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Notification need a logo to use, so we'll be using PowerShell's icon&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$applogo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files\PowerShell\7\assets\Powershell_av_colors.png"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$ExecutionNotifyThreshold&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# seconds&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;global&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;__commandStart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$null&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# To format timestamp as human readable as possible&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Format-Elapsed&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TotalSeconds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-lt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'{0:0.0}s'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TotalSeconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nv"&gt;$parts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;System.Collections.Generic.List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Days&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-gt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$parts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"{0}d"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Days&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Hours&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-gt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$parts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"{0}h"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Hours&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Minutes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-gt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$parts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"{0}m"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Minutes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="nv"&gt;$remainingSeconds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;Floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TotalSeconds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$parts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"{0}s"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$remainingSeconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$parts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-join&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;' '&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;global&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;prompt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;global&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;__commandStart&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nv"&gt;$elapsed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;global&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;__commandStart&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$elapsed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TotalSeconds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-ge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ExecutionNotifyThreshold&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nv"&gt;$lastCmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Get-History&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CommandLine&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nv"&gt;$text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@(&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s1"&gt;'PS7 Finished:'&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;`$&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$lastCmd&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Took {0}"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(Format-Elapsed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$elapsed&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="n"&gt;New-BurntToastNotification&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-AppLogo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$applogo&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;global&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;__commandStart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$OriginalPrompt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;$ExecutionNotifyThreshold&lt;/em&gt; is the time window you want to be notified when the command is taking longer than this threshold. Adjust as you wish&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We have one last step and we are done, keep going 😁🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6
&lt;/h2&gt;

&lt;p&gt;Now add the below code at the end of your &lt;em&gt;$PROFILE&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This should always be at the end, so nothing else will override your custom functionality&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Set-PSReadLineKeyHandler&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Enter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ScriptBlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;global&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;__commandStart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Microsoft.PowerShell.PSConsoleReadLine&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="nx"&gt;AcceptLine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now Save the file, restart your shell (you can also run ". $PROFILE" to restart PS7)&lt;br&gt;
run a command that will take longer than your threshold, you should see a similar Notification pop up like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvfuowi5dyjyrfak49qj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvfuowi5dyjyrfak49qj.png" alt=" " width="360" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes &amp;amp; Caveats
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I have been using oh-my-posh with this approach for a year now and had no problems so far&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This overrides the global &lt;code&gt;prompt&lt;/code&gt; function. If you use oh-my-posh, starship, or another prompt framework, load this &lt;em&gt;after&lt;/em&gt; your prompt is configured.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This hooks the &lt;code&gt;Enter&lt;/code&gt; key via PSReadLine. If you already have a custom Enter handler, you’ll need to merge the logic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To remove the behavior:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Remove-PSReadLineKeyHandler&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Enter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! you're Done. Congrats 🥳&lt;/p&gt;

&lt;p&gt;This removes the need to babysit long-running commands and keeps you informed without breaking flow.&lt;/p&gt;

&lt;p&gt;Tell me what you think about this approach. ❤️&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>windows</category>
      <category>terminal</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Reset Windows 10/11 Password Without USB or Reinstall</title>
      <dc:creator>Jack Scott</dc:creator>
      <pubDate>Wed, 23 Jul 2025 20:26:34 +0000</pubDate>
      <link>https://forem.com/jackscott7/reset-windows-1011-password-without-usb-or-reinstall-43m6</link>
      <guid>https://forem.com/jackscott7/reset-windows-1011-password-without-usb-or-reinstall-43m6</guid>
      <description>&lt;p&gt;Hi there, Its jack, i got locked of my machine 10 minutes before posting this, i thought maybe this post might help some folks out :)&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR (2 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Boot into &lt;strong&gt;Windows Recovery Environment (WinRE)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Swap &lt;code&gt;utilman.exe&lt;/code&gt; with &lt;code&gt;cmd.exe&lt;/code&gt; on *&lt;em&gt;C:*&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;On the login screen, hit &lt;strong&gt;Ease of Access&lt;/strong&gt; → instant SYSTEM cmd.&lt;/li&gt;
&lt;li&gt;Run: &lt;code&gt;net user "YourUser" NewPass123!&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Log in, then restore &lt;code&gt;utilman.exe&lt;/code&gt; to close the backdoor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Done. No USB sticks, no reinstall.&lt;/p&gt;




&lt;h2&gt;
  
  
  Copy/Paste Cheat Sheet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:: WinRE Command Prompt (assumes Windows on C:)
bcdedit | find "osdevice"                :: optional sanity check
copy C:\Windows\System32\utilman.exe C:\Windows\System32\utilman.bak
copy C:\Windows\System32\cmd.exe     C:\Windows\System32\utilman.exe
exit                                      :: reboot

:: Login screen → Ease of Access shell
net user                                   :: list users
net user "YourUser" NewPass123!
exit

:: After logging in (Admin cmd)
copy C:\Windows\System32\utilman.bak C:\Windows\System32\utilman.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why This Works (30 seconds)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;utilman.exe&lt;/code&gt; (Ease of Access) runs &lt;em&gt;before&lt;/em&gt; you sign in. Replace it with &lt;code&gt;cmd.exe&lt;/code&gt;, click the icon on the login screen, and you get a SYSTEM shell. SYSTEM can change local passwords. Afterwards, put &lt;code&gt;utilman.exe&lt;/code&gt; back. Boom.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;BitLocker alert&lt;/strong&gt;: If the drive is locked with BitLocker, you’ll need the recovery key before you can touch &lt;code&gt;C:\Windows\System32&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 0: Force Windows Into WinRE
&lt;/h2&gt;

&lt;p&gt;Can’t log in? Crash it into recovery:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Power on.
&lt;/li&gt;
&lt;li&gt;When you see spinning dots, &lt;strong&gt;hold power&lt;/strong&gt; to force shutdown.
&lt;/li&gt;
&lt;li&gt;Do it &lt;strong&gt;twice&lt;/strong&gt;. On the third boot: &lt;strong&gt;Preparing Automatic Repair&lt;/strong&gt; → &lt;em&gt;Advanced options&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then: &lt;code&gt;Troubleshoot → Advanced options → Command Prompt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You’ll land at something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;X:\Sources&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 1 (Optional): Verify Windows Drive Letter
&lt;/h2&gt;

&lt;p&gt;It’s usually &lt;code&gt;C:&lt;/code&gt;. If you want to be sure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bcdedit | find "osdevice"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sample output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;osdevice partition=C:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it says &lt;code&gt;C:&lt;/code&gt;, keep following as-is. If not, swap the letter in the commands below.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Backup utilman.exe &amp;amp; Drop In cmd.exe
&lt;/h2&gt;

&lt;p&gt;Commands (assuming Windows is on &lt;strong&gt;C:&lt;/strong&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;copy C:\Windows\System32\utilman.exe C:\Windows\System32\utilman.bak
copy C:\Windows\System32\cmd.exe     C:\Windows\System32\utilman.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Overwrite prompt? Type &lt;code&gt;Yes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;exit&lt;/code&gt; and reboot.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Pop a SYSTEM Shell From the Login Screen
&lt;/h2&gt;

&lt;p&gt;At the login screen, click the &lt;strong&gt;Ease of Access&lt;/strong&gt; icon (bottom-right). Instead of accessibility tools, you get Command Prompt as SYSTEM.&lt;/p&gt;

&lt;p&gt;List users so you don’t guess wrong:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;net user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reset the password (exact username, wrap in quotes if it has spaces, e.g. Jack):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;net user Jack MyNewPassword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see: &lt;code&gt;The command completed successfully.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Close the window, log in with the new password.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Restore utilman.exe (Don’t Leave a Door Open)
&lt;/h2&gt;

&lt;p&gt;This step is optional, since it doesn't mess up your system, but security wise, its recommended to do.&lt;/p&gt;

&lt;p&gt;Inside Windows, open &lt;strong&gt;Command Prompt as Administrator&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;copy C:\Windows\System32\utilman.bak C:\Windows\System32\utilman.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Y&lt;/code&gt; to overwrite.&lt;/p&gt;

&lt;p&gt;That closes the backdoor — the Ease of Access button works normally again.&lt;/p&gt;




&lt;h2&gt;
  
  
  Troubleshooting &amp;amp; Gotchas
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;“Access is denied” / Error 5&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You didn’t get a SYSTEM shell. Make sure you clicked Ease of Access &lt;em&gt;after&lt;/em&gt; the swap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Username typos&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Run &lt;code&gt;net user&lt;/code&gt; first. Match the exact name, or wrap it in quotes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Messed up the wrong file / forgot to restore&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Boot back to WinRE and reverse it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;copy C:\Windows\System32\utilman.bak C:\Windows\System32\utilman.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;BitLocker prompt&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No key, no access. Period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft or Domain accounts&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft account:&lt;/strong&gt; Use the online reset: &lt;a href="https://account.live.com/password/reset" rel="noopener noreferrer"&gt;https://account.live.com/password/reset&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain machine:&lt;/strong&gt; Talk to your admin. This only resets local accounts.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This is a &lt;strong&gt;break-glass move&lt;/strong&gt;, not routine hygiene. Use a password manager, link a recovery email/phone, or create a reset disk so you don’t need this again.
&lt;/li&gt;
&lt;li&gt;If this saved you time/money/your sanity, drop a thanks — and document your own “oh crap” fixes for Future You.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope i could help you :)&lt;/p&gt;

&lt;p&gt;Happy un-locking 👊&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>security</category>
      <category>sysadmin</category>
      <category>troubleshooting</category>
    </item>
    <item>
      <title>🚀 Meet IntelliText: The Power Tool for Text Automation You Didn’t Know You Needed</title>
      <dc:creator>Jack Scott</dc:creator>
      <pubDate>Wed, 06 Nov 2024 07:31:54 +0000</pubDate>
      <link>https://forem.com/jackscott7/introducing-intellitext-the-smart-way-to-manage-text-with-ease-mk7</link>
      <guid>https://forem.com/jackscott7/introducing-intellitext-the-smart-way-to-manage-text-with-ease-mk7</guid>
      <description>&lt;p&gt;Hi There&lt;/p&gt;

&lt;p&gt;Ever felt bogged down by repetitive typing tasks? 😫 Whether you’re a developer, writer, or anyone who types a lot, IntelliText is here to save you time. This Python-based tool listens to your keyboard input, auto-inserting text or performing actions based on custom macros. Say goodbye to redundancy and hello to productivity! 💪&lt;/p&gt;

&lt;p&gt;✨ What is IntelliText?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JackScott7/IntelliText" rel="noopener noreferrer"&gt;IntelliText&lt;/a&gt; is your new best friend for automating frequent text and commands. It’s designed to manage word macros and action macros through customizable shortcuts. For instance:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Word Macros 📝: Type !email, and IntelliText can insert your entire email signature. Or !addr could fill in your address.
Action Macros ⚙️: Need to quickly paste clipboard content? Use #cb to instantly insert it, or create a macro like #deploy to launch your favorite script.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;With its extension support, IntelliText is adaptable to any unique workflow, ensuring it grows with your needs. 🔧&lt;/p&gt;

&lt;p&gt;🔑 Key Features You’ll Love&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Custom Macros 🛠️: Build your shortcuts in macros.json for fast, flexible text handling.
Action Automation ⚡: From launching apps to pasting data, use # triggers to reduce redundant steps.
Extension Support 📦: Add your own functions or scripts and integrate them with IntelliText macros, expanding possibilities.
Macro Shuffle 🎲: Tired of typing the same things? Configure lists that shuffle outputs, like rotating programming languages or project tasks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🚀 How to Get Started&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clone the Repo 📥: Get IntelliText from GitHub and install dependencies or install using pip.
Create Your Macros ✏️: Define your frequently used text or actions in the it_macros.json file.
Run IntelliText 🏃: With one click, IntelliText starts working with your macros, ready to simplify your workflow.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Examples: What Can IntelliText Do for You? 💡&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Email Management 📧: Insert standardized replies with a shortcut. Type !thanks, and it can auto-fill a thank-you note.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Coding Shortcuts 💻: Use macros to insert commonly used code snippets or comments, saving time on boilerplate code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quick Data Access 📂: Set up #link to open frequently used resources like documentation or project files directly from IntelliText.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👥 Join the IntelliText Community&lt;/p&gt;

&lt;p&gt;IntelliText is open-source and open for contributions! 💡 If you have ideas for more powerful macros or custom extensions, share them with the community! Get IntelliText, give it a star ⭐ on &lt;a href="https://github.com/JackScott7/IntelliText" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, and let’s make text management smoother together.&lt;/p&gt;

</description>
      <category>python</category>
      <category>automation</category>
      <category>productivity</category>
      <category>shortcut</category>
    </item>
  </channel>
</rss>
