PowerShell: Escludi file temporanei da FileSystemWatcher


0

Sto usando un $watcher ( FileSystemWatcher ) per attivare un $action, quando un file docx viene creato o modificato in una directory:

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\ExportedDocuments"
$watcher.Filter = "*.docx*"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true  
$action = [scriptblock]::Create('
### here is my complete script
')
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
while ($true) {}

Sfortunatamente, nella directory in cui il $watcher ( FileSystemWatcher ) sta guardando, a volte vengono creati file temporanei:

23/01/2019 07:53:52, Creato, C: \ ExportedDocuments \ ~ $ FFFFFFFF.docx

Ciò significa che i file temporanei vengono rilevati anche dal $watcher ( FileSystemWatcher ) e forzare il $action correre.

C'è un modo, per escludere questi file temporanei dal $watcher?

Risposte:


1

Secondo la documentazione non puoi avere più filtri:

Uso di più filtri come " .txt | .doc "non è supportato.

Tuttavia puoi inserire il filtro nella tua azione $. Per esempio :

$action = { $fileName = Split-Path $Event.SourceEventArgs.FullPath -leaf

            if ($fileName -like '~$*') { $logline = "$(Get-Date), $fileName, 'TEMP'"}
            else { $logline = "$(Get-Date), $fileName, 'NOT TEMP'" }

            Add-content "D:\test\log.txt" -value $logline
          }

Produce output come questo:

01/23/2019 11:37:37, ~$f.docx, 'TEMP'
01/23/2019 11:37:37, ~$f.docx, 'TEMP'
01/23/2019 11:38:29, New Microsoft Word Document.docx, 'NOT TEMP'

Quindi, per escludere semplicemente i file temporanei basati sul tuo pattern '~ $' potresti rendere $ azione come:

$action = { $fileName = Split-Path $Event.SourceEventArgs.FullPath -leaf
            if (-not ($fileName -like '~$*')) {
              # Do whatever
            }
          }

Grazie mille, funziona perfettamente!
SteffPoint

1

Sfortunatamente no. Il tuo gestore dovrà determinare quale file è un file temporaneo e ignorarlo. In caso di file temporanei MS Word: il nome inizia con un attributo tilde (~) e / o nascosto


Grazie per la tua risposta. Hai un esempio di codice per me?
SteffPoint

Non ora, ma ho visto che @ lx07 ha fornito un esempio di codice in un'altra risposta
Gert Jan Kraaijeveld
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.