远程写入文件时,网络共享上的Powershell System.IO.FileSystemWatcher不起作用



我需要查看何时将文件写入目录。此目录位于Windows 2003服务器上的映射网络驱动器上。如果我将文件复制到服务器上的这个目录,它就可以工作了。如果我远程编写文件,它就不起作用。当远程写入文件时,我能做些什么来使它正常工作?我想将其保留为事件通知,但如果需要,将更改为轮询方法。如果这是正确的方法,我需要一些最佳实践建议。欢迎我提供有关Windows文件写入通知工作方式的任何详细信息。

示例代码:

$watchFolder = "Z:watched";
$filter = "*.data";
$watcher = New-Object System.IO.FileSystemWatcher $watchFolder, $filter
$watcher.EnableRaisingEvents = $true
$created = Register-ObjectEvent $watcher Created -Action {
   write-host "Found: $($eventArgs.FullPath)"
}

我的经验水平:熟练的unix管理员,Windows开发新手。

FileSystemWatcher中有两种"filter"类型的规范,"filter"字符串和"NotifyFilter"参数。在行中传递给ctor的$filter参数

$watcher = New-Object System.IO.FileSystemWatcher $watchFolder, $filter

仅设置"filter"字符串,该字符串仅确定观察者的"name"筛选器。您还需要设置NotifyFilter参数来指定要监视的更改类型。这可以在同一行上完成:

$watcher = New-Object System.IO.FileSystemWatcher $watchFolder,$filter  -Property @{IncludeSubdirectories = $false; InternalBufferSize = 16384; EnableRaisingEvents = $true; NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}

我还输入了一些您应该设置的其他属性。"InternalBufferSize"是一个修复错误的破解方法-我记不清错误的详细信息,但最好把它放在中(谷歌获取详细信息。)

顺便说一句,我也有和你类似的问题,即使有这些修正:在网络驱动器上监视文件(无论你是否映射了它并使用该映射进行访问)是不稳定的。此外,如果您正在监视的目录在监视期间消失(并可能重新出现),则filesystemwatcher中存在已知的错误——除非指定了超时,否则filesystemwatch将无法恢复。

所以,也许我的改变会解决你的问题,也许不会。如果你发现了一个与我在这里发布的不同的问题解决方案,你介意发布吗,因为即使我发布的内容也不足以解决我的问题,这些问题听起来与你的问题相似。谢谢

它将出现在c#示例中http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs.110%29.aspx您需要完全信任代码,并设置NotifyFilter=[System.IONotifyFilters]::DirectoryName

最新更新