PowerShell文件观察程序作为服务不断运行

时间:2015-05-12 16:37:46

标签: powershell triggers monitoring

我需要一些PowerShell脚本帮助。我有一个文件watcher.ps1,它监视sms.txt中的文件更改并触发moma.ps1。所以这就是我现在所拥有的:

$File = "C:\Users\Ray\Desktop\sms.txt"
$Action = 'C:\Users\Ray\Desktop\moma.ps1'
$global:FileChanged = $false


function Wait-FileChange {
    param(
        [string]$File,
        [string]$Action
         )
    $FilePath = Split-Path $File -Parent
    $FileName = Split-Path $File -Leaf
    $ScriptBlock = [scriptblock]::Create($Action)

    $Watcher = New-Object IO.FileSystemWatcher $FilePath, $FileName -Property @{ 
        IncludeSubdirectories = $false
        EnableRaisingEvents = $true
    }
    $onChange = Register-ObjectEvent $Watcher Changed -Action {$global:FileChanged = $true}

    while ($global:FileChanged -eq $false){
        Start-Sleep -Milliseconds 100
    }

    & $ScriptBlock 
    Unregister-Event -SubscriptionId $onChange.Id
}

Wait-FileChange -File $File -Action $Action

问题是文件需要每15秒左右持续监控一次。使用此脚本,它会在文件发生更改后结束监视。 此外,我更喜欢这个脚本作为服务运行,并在Windows运行时自动启动。 有人可以指导我正确的方向吗?

新的。干杯

1 个答案:

答案 0 :(得分:1)

while($True)
{
    $global:FileChanged = $false
    Wait-FileChange -File $File -Action $Action
}

这对我有用。可能有一种“更好”的方式。

您还需要确保$ Action引用的.ps1脚本以return

结尾

要使其一直运行,请创建一个在启动时运行的计划任务。