繁体   English   中英

System.IO.FileSystemWatcher的Register-ObjectEvent无法正常工作

[英]Register-ObjectEvent of System.IO.FileSystemWatcher not working as expected

我使用powershell脚本来监视文件夹并在创建新文件时获得通知。

脚本如下

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "C:\Users\Desktop\test\"
    $watcher.Filter = "*.nrrd"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = 
    { 
        $path = $Event.SourceEventArgs.FullPath
        $changeType = $Event.SourceEventArgs.ChangeType

        Write-Host "The file '$path' was $changeType at '$(Get-Date)'" -fore green   
    }    
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action
    while ($true) {sleep 5}

即使我手动创建文件或使用.batPHP甚至是python创建文件,它也能正常工作。

它不起作用的唯一方法是当另一个用户(或会话?)创建文件时。

例如:

我在计算机上创建了一个文件夹,并通过LAN与其他计算机共享了该文件夹。 当文件由我(或我的脚本之一)创建时,该脚本可以正常工作并显示句子。

如果我使用LAN上的另一台计算机在同一文件夹中添加文件,则无法正常工作。 什么都没有显示。

(但是,如果我复制/粘贴其他用户创建的文件,则脚本正在运行,因此文件本身不是问题)。


我发现这个这个 ,但职位已经过时。

您有解决方法或想法吗?

更新

手工创建(或复制/粘贴)的文件具有所有者DEBIAN\\root但原始文件具有Unix User\\www-data

也许Powershell(Windows)无法“捕获”这种用户,这也许就是为什么甚至没有创建事件的原因?

尝试提供共享文件夹的UNC路径

$watcher.Path = "\\server\share"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM