2017-08-08 2 views
1

特定のパスのファイルが変更されたときと、文字列「loaded successfully」がWrite-Hostに含まれている場合を監視するPowerShellプログラムを作成しようとしています。特定の時間内に文字列が見つからない場合、最終的に電子メールコンポーネントが追加されます。FileSystemWatcherでファイルを監視する

$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 
+0

[よくある質問](http://stackoverflow.com/help/how-to-ask)をお読みください。 – mklement0

答えて

0

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" 
    } 
} 
関連する問題