2016-12-20 12 views
1

こんにちはすべて私はスクリプトに慣れていません。これまでファイルが変更されたときに電子メール通知を送信しようとしています。スクリプト - ファイルの変更を監視し、電子メール通知を送信します

ファイルが変更された場合に通知するために、以下のスクリプトを使用しようとしましたが、ファイルが変更されるたびにどのようにしますか。下のスクリプトは一度だけ動作しますので、ファイルが変更されたときに変更を通知するために無限ループに入れましたが、それを行うには理想的ではありません。 また、メールを送信する必要があります。それ、どうやったら出来るの。あなたの応答を感謝します。ありがとうございました。

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 
} 

答えて

1

スクリプト自体は、彼らがPowerShellホストに登録され、そのコンソールが閉じられるまで、あなたのファイルを見続けるだろう、トリガするイベントのためのために走っておく必要はありません。 Powershellウィンドウを開いて以下のようなものを実行した場合、以下のようになります(バックグラウンドタスクがやや難しくなるので、これを実行するだけで、変数などを定義する必要があります)

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