Powershell:FileSystemWatcher仅监视某些子文件夹

eaf3rand  于 2023-01-26  发布在  Shell
关注(0)|答案(3)|浏览(131)

如何使用Powershell中的FileSystemWatcher只监视文件夹的某些子文件夹?
我创建了一个新的FileSystemWatcher,如下所示:

$folder = 'path\to\root\monitoring\folder'
$filter = '*.xml'   

$fsw = New-Object IO.FileSystemWatcher

$fsw.Path = $folder
$fsw.Filter = $filter
$fsw.IncludeSubdirectories = $true
$fsw.EnableRaisingEvents = $true

在该根监视文件夹中有一个树状结构:
任务01

  • 工作
  • 认可
  • 核准

任务02

  • 工作
  • 认可
  • 核准

任务03

  • 工作
  • 认可
  • 核准

我只想检查“已批准”文件夹中的更改。
最简单的解决办法是

$folder = 'path\to\root\monitoring\folder\*\approved'

但似乎不太管用。

mbyulnm0

mbyulnm01#

您必须在要监视的每个目录上设置一个监视器,因为路径不支持通配符(请参阅此链接上的Exceptions部分FileSystemWatcher.Path)尝试使用Filter属性来支持可能的通配符路径也不会起作用。

ahy6op9u

ahy6op9u2#

一个可能的解决方法是评估事件处理程序中的“Path”值(Created,Changed,etc),看看它是否符合您要监视和处理的文件夹的模式。如果符合,则继续在事件处理程序中运行代码,如果不符合,则直接从处理程序中返回。

5sxhfpxr

5sxhfpxr3#

接下来的代码可能会做您需要的事情,并进行适当的修改:

$action = {
  $fullpath = $Event.SourceEventArgs.FullPath
  $currfolder = Split-Path $fullpath -Parent
  $filename = Split-Path $fullpath -Leaf
  # Create a text file only if changes happened in folder 'approved'
  # If $currfolder contains 'approved', e.g. create ACK_...txt file, otherwise skip watching over other folders:
  if ($folder.Contains('approved'))
  {
     New-Item -ItemType File -Path "$currfolder\ACK_$filename.txt"
  }
}

相关问题