2016-07-19 1 views
0

Récemment, j'ai connecté mon FTP à Sharefile. Sharfile crée un fichier .syncdb dans mes dossiers ftp. J'ai un code qui vérifie mon dossier FTP pour les nouveaux fichiers créés, les copie dans un nouveau dossier et envoie des e-mails de notification que les fichiers sont arrivés. Parfois, je reçois des e-mails pour les fichiers .syncdb-wal et syncdb-shm. Cela ne crée pas réellement le fichier à copier, mais il crée un email de notification et crée un dossier vide qui est une nuisance. J'essaie de ne pas inclure ces fichiers avec un filtre mais cela ne semble pas fonctionner. Je ne suis pas sûr si vous pouvez déclarer plus d'une extension pour le filtre. Voici le code ci-dessous que j'essaie d'utiliser pour filtrer les fichiers afin de ne pas inclure les fichiers avec les extensions .syncdb-wal et syncdb-shm, il me manque probablement quelque chose de facile.Filtrer pour ne pas inclure plusieurs extensions

$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

Ce n'est pas un filtre valide. Les filtres sont pour le fournisseur de système de fichiers, qui n'autorise qu'un seul filtre inclusif. Cela signifie que vous pouvez seulement dire ce qu'il faut inclure dans les résultats, pas ce qu'il faut exclure, et vous ne pouvez définir qu'un seul filtre, pas plusieurs. Donc '* .txt' est bien d'inclure seulement les fichiers .txt, mais vous ne pouvez pas faire' * .txt, * .docx'. – TheMadTechnician

Répondre

2

Non, vous ne pouvez pas appliquer plusieurs filtres de nom de fichier.

le nom du Inspectez le fichier dans le gestionnaire d'événements au lieu

$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

Merci! Une question de plus, si cela ne vous dérange pas .... Comment puis-je vérifier si un fichier est encore en train d'être écrit avant de le copier, parfois mes fichiers ne copient pas et apparaissent dans l'email comme [filename] .pdf.filepart', ses fichiers pdf sont plus de 60kbs – SikRikDaRula

+1

Ecoutez plutôt l'événement 'Changed', et assurez-vous que l'extension n'est pas' .filepart' (également dans l'action) –