Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 脚本-监视文件的更改并发送电子邮件通知_Windows_Powershell_Cmd_Scripting_File Watcher - Fatal编程技术网

Windows 脚本-监视文件的更改并发送电子邮件通知

Windows 脚本-监视文件的更改并发送电子邮件通知,windows,powershell,cmd,scripting,file-watcher,Windows,Powershell,Cmd,Scripting,File Watcher,大家好,我是新来的脚本。我试图在文件更改时发送电子邮件通知 我尝试使用下面的脚本只是为了在文件发生更改时获得通知,但是每次文件更改时我该如何做。下面的脚本只工作一次,所以我将它放入一个无限循环中,以便在文件更改时注意到更改,但我知道这不是一种理想的方法。 我还需要发一封电子邮件。我该怎么做呢。感谢您的回复。多谢各位 while (1 -eq 1) {$File = "C:\Test\test.log" $Action = 'Write-Output "The watched file was c

大家好,我是新来的脚本。我试图在文件更改时发送电子邮件通知

我尝试使用下面的脚本只是为了在文件发生更改时获得通知,但是每次文件更改时我该如何做。下面的脚本只工作一次,所以我将它放入一个无限循环中,以便在文件更改时注意到更改,但我知道这不是一种理想的方法。 我还需要发一封电子邮件。我该怎么做呢。感谢您的回复。多谢各位

while (1 -eq 1)
{$File = "C:\Test\test.log"
$Action = 'Write-Output "The watched file was changed"'
$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
}

脚本本身不必一直运行才能触发事件,它们在powershell主机中注册,并将一直监视您的文件,直到控制台关闭。因此,如果您打开一个powershell窗口并运行下面这样的操作(显然您需要定义变量等),然后只打开控制台(作为后台任务执行此操作会变得有点棘手),那么下面的内容实际上是可行的

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