tl; dr :
Учитывая путь к файловой системе, как я могу определить, относится ли он к файлу или каталогу в PowerShell?
Во-первых, я на самом деле почти ничего не знаю о Powershell, поэтому прошу прощения за любое невежество, которое я могу отобразить в этом сообщении.
Я надеюсь создать сценарий, который может запускать процессы всякий раз, когда происходят изменения в отслеживаемомпапка.Я нашел сценарий Powershell в Интернете, который, я думаю, дал мне хороший старт.Однако после его небольшой адаптации и тестирования я обнаружил проблему с ним.
Сценарий в основном создает и добавляет файл журнала изменений в отслеживаемую папку и подпапки, и, похоже, он работает хорошо.,Однако, если я внесу какие-либо изменения в подпапку, а также запишу эти изменения в файл журнала, он также добавит строку в файл журнала, сообщающую, что сама подпапка изменилась, как если бы это был файл.это изменилось.
Мне нужен сценарий для запуска процесса при каждом изменении файла, но он не должен запускать дополнительный процесс в дополнение к процессам, которые запускаются любыми изменениями внутри подпапки.Я надеюсь, что вы понимаете, о чем я говорю здесь.
Поэтому мне нужен способ (который хорошо интегрируется в найденный мной сценарий), чтобы различать, когда файл изменяется и папка меняется.
Сценарий (который я немного адаптировал) выглядит следующим образом:
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "monitoredfolder"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = {
$path = $Event.SourceEventArgs.FullPath
$Name = $Event.SourceEventArgs.Name
$OldName = $Event.SourceEventArgs.OldName
$OldFullPath = $Event.SourceEventArgs.OldFullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $OldFullPath, $path, $OldName, $Name"
Add-content "log.txt" -value $logline
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
Register-ObjectEvent $watcher "Deleted" -Action $action
Register-ObjectEvent $watcher "Renamed" -Action $action
while ($true) {sleep 5}
Я надеюсь, что смогу добавить строку в раздел $ action, которая создаст другую переменную, которая может бытьдобавлен в виде столбца в файле журнала.Основываясь исключительно на догадках, я попробовал следующее и другие, но они не работали:
$pathtype = $Event.SourceEventArgs.FullPathType
$pathAttributes = $Event.SourceEventArgs.FullPathAttributes
$Attributes = $Event.SourceEventArgs.Attributes
$IsDirectory = $Event.SourceEventArgs.IsDirectory
Честно говоря, я не ожидал, что они будут работать, но я думал, что я им помогу.
Кто-нибудь здесь знает все, что может идти после второй точки в "$ Event.SourceEventArgs."?
Есть ли другой подход, который я должен использовать?
Большое спасибо.