簡體   English   中英

使用FileSystemWatcher監視目錄

[英]Monitor a directory with FileSystemWatcher

我有一個正在被某些程序填充的目錄。 我想監視此目錄,並檢查文件是否不斷添加到該目錄中。 如果例如5分鍾,沒有文件被添加到目錄,我想得到通知。 文件也將被刪除,但我只需要關心新文件。
該腳本每三個小時運行大約20分鍾。
FileSystemWatcher的代碼:

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\temp\test"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true

$created = Register-ObjectEvent $watcher "Created" -Action {
   write-host "Created: $($eventArgs.FullPath)"
   Get-Date -Format "HH:mm:ss" | Out-File "C:\temp\log.txt" -Append
}

我不知道該如何做到這一點,我為我的每一次輸入都感到感謝。

PowerShell腳本不太適合連續運行並報告事件。

一種實現所需目標的方法是使用如下腳本:

[DateTime] $LastWriteTime = (Get-ChildItem -Path "C:\temp\test" -File | Sort-Object LastWriteTime | Select -Last 1).LastWriteTime
if ($LastWriteTime -le (Get-Date).AddMinutes(-5))
{
    Write-Output "No files added in the last 5 minutes"
    # notify me...
} 

並安排Windows Task Scheduler中的腳本每五分鍾運行一次。

它會找到目錄中編輯的最新文件。

無需FileSystemWatcher

您可以通過Task Scheduler運行一個單獨的腳本,該腳本使用您的日志文件查看最近5分鍾內是否已創建文件。

$log = Get-Content -Path T:\log.txt 
$currentTime = Get-date
$5minutesAgo = $currentTime.AddMinutes(-5)
$FileAdded = $false

foreach($time in $log){
    if((get-date $time) -gt $5minutesAgo){
        $FileAdded = $true
    }
}

If($FileAdded) {
    Write-host "File was added in the last 5mins"
} Else {
    Write-host "No file added in the last 5mins"
    # Add in email code here
}

這將逐行通過您的日志文件,並檢查時間是否在最后文件分鍾內。 然后,如果添加了文件,它將把變量$FileAdded設置為$true 然后,您可以使用它來決定是否發送電子郵件。

注意 :如果此程序連續運行,請確保定期將日志文件翻轉以保持處理進度。 由於您沒有在日志文件中包含日期,因此您必須每天至少滾動一次日志文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM