uncategorized/sync-dirs/register-watcher.ps1

param(
    [parameter(Mandatory = $true, Position = 0)]
    [string]$SourceIdentifier,
    [parameter(Mandatory = $true, Position = 1)]
    [string]$Source,
    [parameter(Mandatory = $true, Position = 2)]
    [string]$Destination,
    [parameter(Mandatory = $false, Position = 3)]
    [string]$Filter = "*.*"
)

$data = @{ src = $Source; dst = $Destination }
$fsw = New-Object IO.FileSystemWatcher $Source, $Filter -Property @{IncludeSubdirectories = $true; NotifyFilter = [IO.NotifyFilters]"FileName, LastWrite"}

$action = {
    $src = $event.MessageData.src
    $dst = $event.MessageData.dst
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "The file "$name" was $changeType at $timeStamp" -fore white
    Robocopy.exe $src $dst /MIR /Z /W:1 /R:1
}

Register-ObjectEvent $fsw Created -SourceIdentifier "HC::FileCreated:$SourceIdentifier" -Action $action -MessageData $data

Register-ObjectEvent $fsw Deleted -SourceIdentifier "HC::FileDeleted:$SourceIdentifier" -Action $action -MessageData $data

Register-ObjectEvent $fsw Changed -SourceIdentifier "HC::FileChanged:$SourceIdentifier" -Action $action -MessageData $data