Перемещение файлов между двумя местоположениями постоянно - PullRequest
0 голосов
/ 19 октября 2018

У меня есть несколько файлов, которые потребуют перемещения между двумя серверами по сети.Пути UNC будут \ server \ c $ ... и такими же на другом сервере.

Я ищу скрипт или часть программного обеспечения, которая бы это делала.Я знаю, что могу использовать PowerShell или robocopy, но мне бы хотелось, чтобы что-то отслеживало местоположение и, если файл обнаруживалось, оно перемещало бы его.обнаружено - как в «о, там есть файл» ждет 5 секунд перемещает файл '.

Каков наилучший способ сделать это?

Редактировать: удалось отсортировать это, создав .exe из скрипта PowerShell, предоставленного Drew, с приложением PS EXE и используя NSSM для создания сервиса из него.

1 Ответ

0 голосов
/ 19 октября 2018

Прежде всего, пожалуйста, попробуйте создать код самостоятельно в следующий раз.Даже если это был какой-то Get-ChildItem цикл while.

Он будет отслеживать местоположение папки $watcher.path для любых новых "Created" событий и примерно через 5 секунд после события.Я не уверен, откуда я его украл, но он пригодился в течение длительного времени.

Он будет отслеживать только НОВЫЕ события, а не предыдущие события.Поэтому, если в папке есть несколько файлов, она будет запускать действие только для вновь созданных / измененных файлов в зависимости от вашего действия.

# Set folder and files to watch and misc flags
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\Source\Location"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true  

# Define actions to be taken when an event is detected
$action = {
    $path = $Event.SourceEventArgs.FullPath
    $Last = 1
    $Current = (Get-Item $path).length
    while ($Current -ne $Last) {
        $Last = $Current
        Start-Sleep -Seconds 1
        $Current = (Get-Item $path).length
    }
    # Change x if you want to increase the time before the move
    #sleep x
    Move-Item -Path $path -Destination "C:\Destination\Location"
}

# Decide which events to watch
# Changed, Created, Deleted, Renamed events.
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}
...