如果我关闭它正在运行的PS窗口,FileSystemWatcher将停止工作

时间:2018-05-16 08:44:03

标签: powershell filesystemwatcher

我想持续监控文件夹中的任何新文件...如果有任何新文件,我的脚本应该选择该文件并开始处理它。

谷歌搜索后,我找到了这个解决方案,它对我来说很好..

 $folder = 'G:\localexcelfiles\Logistics\logistics automation'
 $filter = '*.*'                             # <-- Takes only files that has xlsx extension


 $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
  IncludeSubdirectories = $false              
  NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
 }
 $onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

  $path = $Event.SourceEventArgs.FullPath
  $Filename = $Event.SourceEventArgs.Name
  $changeType = $Event.SourceEventArgs.ChangeType
  $timeStamp = $Event.TimeGenerated 
 }

为了运行这个脚本,我打开windows powershell ISE并运行以下命令

  ./scriptname

这会启动我的脚本并为我的文件夹创建一个观察者..如果我试图再次运行该脚本,则会抛出错误,说“订阅者已经存在”

但问题是......如果我关闭PowerShell ISE,我运行脚本......我的脚本也停止了,观察者也被删除了

如何确保此FileSytemWatcher应该24X7运行?

如果我使用任务计划程序运行我的脚本,可以这样做吗?

1 个答案:

答案 0 :(得分:1)

使用以下建议的设置从任务计划程序调用PowerShell脚本。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -noprofile
-executionpolicy bypass -file C:\YourPowerShellScript.ps1

注意:我将此命令添加到批处理文件中,然后从计划任务中调用该批处理文件,这是不必要的额外步骤,但我发现从计划任务中以这种方式运行它更干净,更容易任务。

-NoExit停止关闭窗口,以便它继续在后台运行FileSystemWatcher。

-NoProfile无需加载用户配置文件也可以运行此脚本,这意味着它效率更高,因为它不会加载配置文件中设置的所有用户脚本。

-Executionpolicy bypass确保将允许运行脚本。