簡體   English   中英

使用FileSystemWatcher監視文件

[英]Monitor files with FileSystemWatcher

我試圖創建一個PowerShell程序,以監視何時修改了某個路徑中的文件,並且僅當該文件現在包含字符串“ loading success”時才監視它到Write-Host 如果在一定時間內未找到該字符串,最終將添加一個電子郵件組件。

$folder = 'C:\Users\afila\Desktop\TEST' # Enter the root path you want to monitor. 
$files = Get-ChildItem $folder
$filter = '*.txt'  # You can enter a wildcard filter here. 

# In the following line, you can change 'IncludeSubdirectories to $true if required.                           
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $false;
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}

# Function to search folder contents for a string
function Search-Folder {
    $SearchTerm = "Loaded successfully"

    foreach ( $file in $files) {
        $text = Get-Content "$folder\$file"
        if ($text | where {$text -like "*$SearchTerm*" }) {
            Write-Host "The file '$file succeeded" -fore white
            Out-File -FilePath C:\Users\afila\Desktop\SucceededLog.txt -Append -InputObject "The file '$file' completed at $timeStamp"
        }
    }
}

# Here, all the Changed event is registerd. 
Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType 
    $timeStamp = $Event.TimeGenerated  
    $searchTerm = "Loaded successfully"
    foreach ($file in $files) {
        $text = Get-Content "$folder\$file"
        if ($text | where {$text -like "*$searchTerm*"}) {
                Write-Host "The file '$name' was $changeType at $timeStamp" -fore magenta 
                Out-File -FilePath C:\Users\afila\Desktop\TestLogItems\TestLog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"
        }
    }
}

# To stop the monitoring, run the following commands: 
Unregister-Event FileChanged

FileSystemWatcher已經通過$Event.SourceEventArgs.Path屬性為您提供了文件的完整路徑,因此您不需要循環遍歷文件列表。

Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {
    $path = $Event.SourceEventArgs.Path
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    $searchTerm = 'Loaded successfully'

    if ((Get-Content $path) -like "*$searchTerm*"}) {
        Write-Host "The file '$name' was $changeType at $timeStamp"
    }
}

暫無
暫無

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

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