Наблюдатель файловой системы для запуска сценария на основе времени простоя виртуальной машины - PullRequest
0 голосов
/ 27 мая 2020

У меня есть вопрос о требованиях к моему клиенту, в настоящее время я использую три сценария для выполнения своей работы. script1.ps1 - переименовывать файлы с * .host1.txt и * .host2.txt. Script2.ps1 - выбирает файлы с расширением * .host1.txt (в VM1), script3.ps1 выбирает файлы с расширением * .host2.txt (в VM2). Таким образом, это хорошо работает. Каковы мои требования к пользователю, предположим, что если script2.ps1 или script3.ps1 fini sh его текущее задание на соответствующих виртуальных машинах, сценарий должен переименовывать файлы на основе IDLE VM (если VM1 простаивает, он должен переименовать с * host1.txt и запустить задание, то же самое, если ВМ2 простаивает, его следует переименовать в * .host2.txt и запустить задание. вставив три сценария, которые я запускаю прямо сейчас, нужна помощь. Концепция заключается в том, что виртуальные машины не должны бездействовать, на основе сценария состояния простоя vm для переименования файлы и запустите задание.

script1

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "C:\Test"
    $watcher.Filter = "*.txt"
    $watcher.IncludeSubdirectories = $false
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath
                $filename = [io.path]::GetFileNameWithoutExtension($path)
                ###$changeType = $Event.SourceEventArgs.ChangeType
                ###$logline = "$(Get-Date), $changeType, $path, $filename"
                ###Add-content "D:\log.txt" -value $logline
                ###$proc=start-process "D:\source\$filename.bat" -Wait -NoNewWindow
                $script:counter++
                $hostname=""
                if(($script:counter % 2) -eq 0){
                    $hostname="host1"
                } Else {
                    $hostname="host2"
                }
                Rename-Item -Path "C:\Test\$filename.txt" -NewName "$filename.$hostname.txt"
              }    
### 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}

Script2

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "C:\Test"
    $watcher.Filter = "*.host1.txt"
    $watcher.IncludeSubdirectories = $false
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath
                $filename = [io.path]::GetFileNameWithoutExtension($path)
                $length = $filename.length
                $filename=$filename.substring(0,$length-6)
                ###$changeType = $Event.SourceEventArgs.ChangeType
                ###$logline = "$(Get-Date), $changeType, $path, $filename"
                ###Add-content "D:\log.txt" -value $logline
                $proc=start-process "C:\Test\$filename.bat" -Wait

                Remove-Item -Path "C:\Test\$filename.host1.txt"
              }    
### 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}

Script3

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "C:\Test"
    $watcher.Filter = "*.host2.txt"
    $watcher.IncludeSubdirectories = $false
    $watcher.EnableRaisingEvents = $true  
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath
                $filename = [io.path]::GetFileNameWithoutExtension($path)
                $length = $filename.length
                $filename=$filename.substring(0,$length-6)
                ###$changeType = $Event.SourceEventArgs.ChangeType
                ###$logline = "$(Get-Date), $changeType, $path, $filename"
                ###Add-content "D:\log.txt" -value $logline
                $proc=start-process "C:\Test\$filename.bat" -Wait

                Remove-Item -Path "C:\Test\$filename.host2.txt"
              }    
### 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...