当文件/文件夹被修改时运行服务

当文件/文件夹被修改时运行服务

我想知道当文件夹或文件发生变化时是否有可能触发服务。

我找到了 sc triggerinfo 但我不知道是否可以用它来做这件事。

答案1

是的,有可能,例如使用 Power Shell 脚本

您可以使用多种策略在 PowerShell 中监视文件系统:

  • 创建一个新的 System.IO.FileSystemWatcher 对象,并设置适当的设置:

    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = $searchPath
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true
    

    .Path 是将被监视的路径,.IncludeSubdirectories 告诉 FileSystemWatcher 监视 .Path 的所有子目录

  • 现在我们需要定义一些事件,当 $watcher 检测到文件系统更改时将触发,我将为 Changed、Created、Deleted 和 Renamed 定义一个事件:

$changed = Register-ObjectEvent $watcher "Changed" -Action {
   write-host "Changed: $($eventArgs.FullPath)"
}
$created = Register-ObjectEvent $watcher "Created" -Action {
   write-host "Created: $($eventArgs.FullPath)"
}
$deleted = Register-ObjectEvent $watcher "Deleted" -Action {
   write-host "Deleted: $($eventArgs.FullPath)"
}
$renamed = Register-ObjectEvent $watcher "Renamed" -Action {
   write-host "Renamed: $($eventArgs.FullPath)"
}
  • 在每个事件中,您可以定义事件触发时要发生的情况的代码。在此示例中,我只是直接输出操作类型和文件系统上更改的对象的完整路径。

  • 差不多就是这样了。这些事件会一直存在,直到您关闭当前 PowerShell 会话或手动取消注册这些事件。您可以使用 Unregister-Event 命令取消注册这些事件:

    Unregister-Event $changed.Id
    Unregister-Event $created.Id
    Unregister-Event $deleted.Id
    Unregister-Event $renamed.Id
    

相关内容