【发布时间】:2019-10-08 08:39:20
【问题描述】:
FileSystemWatcher 在事件中触发两次是 Powershell 中的一个已知问题。我正在尝试解决此问题,因为我正在查看正在创建的文件,然后将其推送到打印机。双重触发意味着我得到了重复的打印输出
我知道以前有人问过这个问题,但是当谈到 Powershell(实际上是一般的脚本)时,我是一个完全的新手,所以一些答案已经直接浮现在我的脑海中
在代码中,我正在查看一个文件夹,然后将子目录名称作为打印机名称传递给发送作业。这是因为正在使用的软件正在将 pdf 文件从远程位置复制到这些文件夹中(由于 citrix,该软件无法直接访问打印机)
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "L:\Label\"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = { $path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$printer = Split-Path (Split-Path $path -Parent) -Leaf
$logline = "$(Get-Date), $changeType, $path, $printer"
Add-content "c:\prog\log.txt" -value $logline
C:\prog\SumatraPDF.exe -print-to "\\http://srv:631\$printer" $path
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}
我希望看到打印命令(Sumatra 调用)仅在将 pdf 文件放入监视文件夹时出现一次
【问题讨论】:
标签: powershell filesystemwatcher