Você apenas se inscreveu no evento Alterado - isso ocorre quando o conteúdo de um arquivo é alterado ou é copiado. Isso não inclui arquivos criados ou movidos.
Pode querer mexer para obter o resultado como deseja, mas o seguinte deve funcionar:
$source = "C:\Ops"
$filter = "*.*"
$fsw = New-Object System.IO.FileSystemWatcher $source, $filter -Property @{
IncludeSubDirectories=$false
NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated = @()
@(
"Changed",
"Created",
"Renamed"
) | Foreach-Object {
$onCreated += Register-ObjectEvent $fsw -EventName $_ -SourceIdentifier "MyFolderBReports_$_" -Action {
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp"
Move-Item C:\Ops\*.* -Destination C:\Ops\Test
}
}
Isso está se registrando nos eventos Criado e Renomeado, além do evento Alterado, portanto, deve cobrir todas as suas bases. Observar $fsw | GM
mostra que há eventos Deleted
, Disposed
e Error
adicionais, mas, para sua finalidade, não são necessários.