2017-11-21 5 views
2

私は多くの創造的なアイデアを持った同僚を抱えていますが、PowerShellでは才能がありません。彼は、フォルダの変更を定期的にチェックすることを望んでいます。新しいファイルがフォルダに追加されるとすぐに、彼はメールで通知を受けたいと考えています。だから、私はPSスクリプトが必要だと思う。PowerShell:フォルダーに変更がないかチェックし、そうであれば電子メールを送信します。

私はこれを行う方法について全く考えていません。

私は次のコードを発見しました - これは仕事をするために変更できますか?

Param (
    [string]$Path = "C:\Test", 
    [string]$SMTPServer = "SMTP IP", 
    [string]$From = "[email protected]", 
    [string]$To = "[email protected]", 
    [string]$Subject = "New stuff!" 
) 

$SMTPMessage = @{ 
    To   = $To 
    From  = $From 
    Subject = "$Subject at $Path" 
    Smtpserver = $SMTPServer 
} 

$File = Get-ChildItem $Path | Where { $_.LastWriteTime -ge [datetime]::Now.AddMinutes(-1) } 
If ($File) { 
    $SMTPBody = "`nThe following files have recently been added/changed:`n`n" 
    $File | ForEach { $SMTPBody += "$($_.FullName)`n" } 
    Send-MailMessage @SMTPMessage -Body $SMTPBody 
} 

助けてください。

+0

。代わりに、['FileSystemWatcher'](https://mcpmag.com/articles/2015/09/24/changes-to-a-folder-using-powershell.aspx)を使用してください。 – Clijsters

+0

これはあなたに役立ちます:https://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084b – Snak3d0c

答えて

1

特定のフォルダやそのサブアイテムの変更を通知するには、.Net Frameworks FileSystemWatcherクラスを使用できます。これは自動的に取得するための素晴らしいソリューションですが

Register-ObjectEvent $watcher Created -SourceIdentifier FileCreated -Action { 
    $SMTPBody = "`nThe following file have recently been added/changed:`n`n$($Event.SourceEventArgs.Name)" 
    Send-MailMessage @SMTPMessage -Body $SMTPBody} 
} 

Register-ObjectEventを使用してイベントを登録し、

$pattern = "*.*" 
$watcherProperties = @{ 
    IncludeSubdirectories = $false; 
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite' 
    } 
$watcher = New-Object IO.FileSystemWatcher $Path, $pattern -Property @watcherProperties 
その後

、変更について通知を取得するとメールブロックを追加します。使用してPowerShellを使用して新しいものをインスタンス化通知、重いループなしで、それはまた、いくつかの欠点があります。この構成では、ファイルが変更されたときにのメールが1つずつ送られます。 複数のファイルを含むディレクトリを移動すると、メールが束ねられます。

あなたはここにFileSystemWatcherの詳細を読むことができます:あなたは、変更のためのあなたのフォルダを確認する必要はありません

関連する問題