<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Powershell on Hillel Wayne</title>
    <link>https://www.hillelwayne.com/tags/powershell/</link>
    <description>Recent content in Powershell on Hillel Wayne</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 18 Aug 2022 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://www.hillelwayne.com/tags/powershell/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>File Watcher</title>
      <link>https://www.hillelwayne.com/tipjar/ps-01/</link>
      <pubDate>Thu, 18 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/tipjar/ps-01/</guid>
      <description>&lt;p&gt;I wanted to run a script every time a file changed. There&amp;rsquo;s a bunch of tools to do this for Linux, but I&amp;rsquo;m on Windows (because &lt;a href=&#34;https://www.hillelwayne.com/post/ahk/&#34;&gt;reasons&lt;/a&gt;). I found &lt;a href=&#34;https://github.com/wgross/fswatcher-engine-event&#34;&gt;a PowerShell module&lt;/a&gt;, &lt;a href=&#34;https://www.PowerShellgallery.com/packages/FSWatcherEngineEvent/1.4&#34;&gt;installed it&lt;/a&gt;, and got to work.&lt;/p&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #272822&#34;&gt;&lt;pre style=&#34;line-height: 125%;&#34;&gt;&lt;code class=&#34;language-PowerShell&#34; data-lang=&#34;PowerShell&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&#34;color: #66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;Enter-Watcher&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color: #66d9ef&#34;&gt;Param&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;(&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;[PSDefaultValue(Help=&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;)]&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;$Filter=&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;$Path=&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;$SourceIdentifier=&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;watcher-event&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;,&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color: #66d9ef&#34;&gt;Parameter&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #66d9ef&#34;&gt;Mandatory&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;=$true,&lt;/span&gt; &lt;span style=&#34;color: #66d9ef&#34;&gt;Position&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;=0)]&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;$ScriptBlock&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;)&lt;/span&gt;

  &lt;span style=&#34;color: #75715e&#34;&gt;#Cleanup of previous uses. Remove past watchers of this type, to eliminate double-events&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;$e&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;$SourceIdentifier-emit&amp;quot;&lt;/span&gt; 
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;Remove-Job&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-name&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$e,$SourceIdentifier&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-Force&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;2&amp;gt;$null&lt;/span&gt; &lt;span style=&#34;color: #75715e&#34;&gt;# -Force removes not-stopped jobs too&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;Remove-FileSystemWatcher&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-SourceIdentifier&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$SourceIdentifier&lt;/span&gt;

  &lt;span style=&#34;color: #f8f8f2&#34;&gt;$fs&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;New-FileSystemWatcher&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-SourceIdentifier&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$SourceIdentifier&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-Path&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$Path&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-Filter&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$Filter&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-Action&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #66d9ef&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;($event.messageData.ChangeType&lt;/span&gt; &lt;span style=&#34;color: #f92672&#34;&gt;-eq&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;Changed&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
      &lt;span style=&#34;color: #f8f8f2&#34;&gt;$x&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #e6db74&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;$($event.SourceIdentifier)&lt;/span&gt;&lt;span style=&#34;color: #e6db74&#34;&gt;-emit&amp;quot;&lt;/span&gt;
      &lt;span style=&#34;color: #f8f8f2&#34;&gt;New-Event&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-SourceIdentifier&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$x&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-MessageData&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$event.messageData.fullpath&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;

  &lt;span style=&#34;color: #f8f8f2&#34;&gt;$job&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;Register-EngineEvent&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-SourceIdentifier&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$e&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;-Action&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$Scriptblock&lt;/span&gt;
  &lt;span style=&#34;color: #66d9ef&#34;&gt;while&lt;/span&gt;&lt;span style=&#34;color: #f8f8f2&#34;&gt;($true)&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color: #f8f8f2&#34;&gt;receive-job&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;$job&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt; 

&lt;span style=&#34;color: #66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;Remove-AllWatchers&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color: #f8f8f2&#34;&gt;Get-FileSystemWatcher&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color: #f8f8f2&#34;&gt;Remove-FileSystemWatcher&lt;/span&gt;
&lt;span style=&#34;color: #f8f8f2&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Call it like:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>