У меня есть скрипт PowerShell, который использует файловую систему для отслеживания определенной папки. Сценарий состоит в том, что коллеги из другой команды помещают туда папку с данными для обработки. Эта папка имеет определенное соглашение об именах (начинается с гггг-мм-дд). Сценарий отслеживает события как «Создано», так и «Переименовано», поскольку они продолжают создавать папки непосредственно по отслеживаемому пути, в результате чего первоначальное имя папки становится «Новой папкой», а затем переименовывают ее. Теперь иногда мне нужно переименовать эту папку снова (более семантически), которая запускает еще одно событие и заполняет почтовые ящики всех тех, которые уведомлены Send-MailMessage, что событие запускается (то есть клиент, PM и т. Д.).
function fileWatcher {
param (
[string]$Path
)
$FileSystemWatcher = New-Object System.IO.FileSystemWatcher
$FileSystemWatcher.Path = $Path
$FileSystemWatcher.Filter = "20*"
$Action = {
$Object = "<a href='{0}'>{0}</a> was created at {2}" -f $Event.SourceEventArgs.FullPath,
$Event.SourceEventArgs.ChangeType,
$Event.TimeGenerated
$WriteHostParams = @{
ForegroundColor = 'Green'
BackgroundColor = 'Black'
Object = $Object
}
try {
Send-MailMessage -From 'example@example.com' -To 'example2@example.com' -Subject "New Backlog Folder ready to be Loaded" -Body $Object -SmtpServer 'smtp.example.com' -ErrorAction Stop -BodyAsHtml
Write-Host @WriteHostParams
}
catch { write-host "send failed" -ForegroundColor Black -BackgroundColor White } }
Register-ObjectEvent -InputObject $FileSystemWatcher Created -Action $Action
Register-ObjectEvent -InputObject $FileSystemWatcher Renamed -Action $Action
Я ожидаю, что только первоначальное создание в соответствии с соглашением об именах и первое переименование файла вызовет событие. Любые последующие переименования останутся незамеченными.