Powershell 如何使io.SystemFileWatcher无限期运行

Powershell 如何使io.SystemFileWatcher无限期运行,powershell,Powershell,我有一个脚本,可以调用两个io.systemfile Watcher,我希望全天候运行该脚本,以便它能够检测需要处理的数据,并自动将其交给处理该数据的脚本(并将结果上载到网络): 我正在考虑把它变成一个windows服务,但它能像现在这样全天候运行吗?我不确定在哪里可以添加无限循环而不创建无限io.systemfilewatchers。我知道作为PS脚本,powershell需要不断运行。但是,如果我创建了一个批处理文件来运行它,并将其设置为nssm的服务,那么这能满足我的需要吗 在任务计划程序

我有一个脚本,可以调用两个io.systemfile Watcher,我希望全天候运行该脚本,以便它能够检测需要处理的数据,并自动将其交给处理该数据的脚本(并将结果上载到网络):


我正在考虑把它变成一个windows服务,但它能像现在这样全天候运行吗?我不确定在哪里可以添加无限循环而不创建无限io.systemfilewatchers。我知道作为PS脚本,powershell需要不断运行。但是,如果我创建了一个批处理文件来运行它,并将其设置为nssm的服务,那么这能满足我的需要吗

在任务计划程序中以1分钟或2分钟的间隔计划脚本。。这样你的工作就可以完成了。您也可以将其创建为服务。但这会导致它每1-2分钟创建一个新的观察程序,或者每1-2分钟仅检查初始观察程序是否仍处于活动状态,如果不在脚本中创建观察程序,则重新启动它们。只需计划脚本在每个时间间隔和任何时候运行,您只需
测试路径
文件是否存在…因此,除了基本
测试路径
验证之外,脚本中不需要任何特定的观察者。我相信我确实需要一个观察者,因为有几个文件会激活目标目录上的测试路径,我需要忽略它们,只在添加它们时关注它们。使用NSSM时要非常小心,并确认它来自信誉良好的来源。我在一个客户网站上安装了这个软件,它附带了一个勒索软件病毒,使他们瘫痪。我不得不从头开始重建他们的机器,这花费了我金钱和时间。我建议改为使用Apache Tomcat服务。在任务计划程序中以1分钟或2分钟的间隔计划脚本。。这样你的工作就可以完成了。您也可以将其创建为服务。但这会导致它每1-2分钟创建一个新的观察程序,或者每1-2分钟仅检查初始观察程序是否仍处于活动状态,如果不在脚本中创建观察程序,则重新启动它们。只需计划脚本在每个时间间隔和任何时候运行,您只需
测试路径
文件是否存在…因此,除了基本
测试路径
验证之外,脚本中不需要任何特定的观察者。我相信我确实需要一个观察者,因为有几个文件会激活目标目录上的测试路径,我需要忽略它们,只在添加它们时关注它们。使用NSSM时要非常小心,并确认它来自信誉良好的来源。我在一个客户网站上安装了这个软件,它附带了一个勒索软件病毒,使他们瘫痪。我不得不从头开始重建他们的机器,这花费了我金钱和时间。我建议改用ApacheTomcat服务。
Function Report1Watcher{

param ($folder)


$filter = "*vac*.csv"

$watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $true
    EnableRaisingEvents = $true
    InternalBufferSize = 65536
}

Write-Host "Watching $folder for creation of $filter files..."

$changeAction = {

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


       $Actionpath = Split-Path $Path


        write-host $Actionpath " Ready for Report1"



       Report1 $Actionpath

       write-host $Actionpath " Report1 Generated"


 }

    Register-ObjectEvent $Watcher -EventName "Created" -Action $changeAction



}




Function Report2Watcher{

param ($folder)


$filter = "*4.4*"


$watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $true
    EnableRaisingEvents = $true
    InternalBufferSize = 65536
}

Write-Host "Watching $folder for creation of $filter files..."






$changeAction = {

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




      $Actionpath = Split-Path $Path

      $Actionpath = Split-Path $Actionpath


      write-host $Actionpath " Ready for Report2"



      Report2 $Actionpath


      write-host "Report2 Generated" 




 }

    Register-ObjectEvent $Watcher -EventName "Created" -Action $changeAction




}



Function Watchmaster{



Report1Watcher $Testdir

Report2Watcher $Testdir 



}

Watchmaster