Я пытаюсь создать сценарий PowerShell для записи в текстовый файл, если новый файл не был создан в папке Windows (C:\Test) по истечении определенного периода времени. В качестве основы я использую сценарий, показанный здесь. Ниже мой модифицированный скрипт.
Как вы можете видеть, я добавил оператор IF-ELSE, который проверяет, было ли последнее создание файла более 10 секунд назад. Я также изменил $action
чтобы присвоить текущую метку времени $lasttimefilecreated
и сбросить $logflag
. Однако, похоже, что $ action не выполняет ни одну из этих двух вещей. Add-content "C:\FileCreated.txt"
успешно выполняется, и файл создается, но значения $lasttimefilecreated
и $logflag
остаются неизменными и не выводятся на консоль. Есть ли другой способ сделать это? Я просмотрел статью Microsoft об объекте Register-ObjectEvent, но не смог понять, почему блок сценария, который я назначаю для $ action, не работает полностью. Ценю твою помощь!
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\Test"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
### INITIALIZE VARIABLES
$lasttimefilecreated = $(Get-Date)
$logflag = 0
$action = { $lasttimefilecreated = $(Get-Date)
"$lasttimefilecreated"
$logflag = 0
"$logflag"
$path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $path"
Add-content "C:\FileCreated.txt" -value $logline
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED + LOOP INDEFINITELY THROUGH IF-ELSE LOGIC
$created = Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {
if ((New-TimeSpan -Start $lasttimefilecreated –End $(Get-Date)).Seconds -gt 10 -and $logflag -eq 0) {
$logflag = 1
Add-content "C:\Log.txt" -value "$(Get-Date)"
"Log.txt file created/modified at $(Get-Date)"
}
else {sleep 5}}