2016-07-19 10 views
0

Kürzlich habe ich mein FTP mit ShareFile verbunden. Sharfile erstellt eine .syncdb-Datei in meinen FTP-Ordnern. Ich habe Code, der meinen FTP-Ordner nach neu erstellten Dateien durchsucht, sie in einen neuen Ordner kopiert und Benachrichtigungs-E-Mails sendet, dass Dateien angekommen sind. Manchmal erhalte ich jetzt E-Mails für .syncdb-wal und syncdb-shm-Dateien. Dies erstellt tatsächlich nicht die zu kopierende Datei, aber es erstellt eine Benachrichtigungs-E-Mail und erstellt einen leeren Ordner, was ein Ärgernis ist. Ich versuche nur, diese Dateien nicht mit einem Filter zu versehen, aber es scheint nicht zu funktionieren. Ich bin mir nicht sicher, ob Sie mehr als eine Erweiterung für den Filter deklarieren können. Hier ist der Code unten, den ich versuche, Dateien zu filtern, um Dateien mit den Erweiterungen .syncdb-wal und syncdb-shm nicht zu enthalten, ich vermisse wahrscheinlich etwas Einfaches.Filter, um nicht mehrere Erweiterungen zu enthalten

$MonitorFolder = Get-Content "C:\Users\RickG\Desktop\ScanFTPDeptClients\Pathlist.txt" 

$filter ='*.syncdb-wal, *.syncdb-shm ' 
foreach ($path in $MonitorFolder){ 
$watcher = New-Object System.IO.FileSystemWatcher $path, -ne $filter 
#Files only. Default is files + directory 
$watcher.NotifyFilter = [System.IO.NotifyFilters]'FileName,LastWrite' 
} 
+1

Das ist nicht ein gültiger Filter ist. Filter sind für den Dateisystemanbieter, der nur einen einzigen String inklusive Filter zulässt. Das bedeutet, dass Sie nur sagen können, was in den Ergebnissen enthalten sein soll und nicht, was ausgeschlossen werden soll. Sie können nur einen Filter festlegen, nicht mehrere. Also ist '* .txt' in Ordnung, um nur .txt-Dateien einzuschließen, aber Sie können' * .txt, * .docx' nicht tun. – TheMadTechnician

Antwort

2

Nein, Sie können nicht mehrere Dateinamenfilter anwenden.

Überprüfen Sie den Namen der Datei, in der Event-Handler anstelle

$watcher = New-Object System.IO.FileSystemWatcher $path 
$watcher.NotifyFilter = [System.IO.NotifyFilters]'FileName,LastWrite' 
$watcher.Filter = '*.*' 

Register-ObjectEvent $watcher -EventName Created -Action { 
    if ($EventArgs.Name -eq '.syncdb-wal' -or $EventArgs.Name -eq '.syncdb-shm'){ 
     # nope, not interested 
     return 
    } 
} 
+0

Danke! Ihr Lebensretter, Noch eine Frage, wenn es Ihnen nichts ausmacht ... Wie kann ich vor dem Kopieren prüfen, ob eine Datei noch geschrieben wird, manchmal werden meine Dateien nicht kopiert und erscheinen in der E-Mail als "[Dateiname]" .pdf.filepart ', seine hauptsächlich pdf's, die vorbei sind wie 60kbs – SikRikDaRula

+1

Hören Sie stattdessen auf das' Geändert' Ereignis und stellen Sie sicher, dass die Erweiterung nicht '.filepart' ist (auch innerhalb der Aktion) –

Verwandte Themen