PowerShell не запускает набор файлов .bat в фоновом режиме - PullRequest
0 голосов
/ 26 февраля 2020

У меня работает скрипт Powershell на сервере, и я не могу найти причину, по которой он перестает работать. Буду признателен за любую помощь, оказанную / предложенную. Powershell планируется запускать (перезапускать) каждый день в 4:15. Раньше он работал нормально, но по какой-то причине у меня сейчас возникают проблемы.

1) Я бы запустил два сценария PS1 с командным файлом. Они будут размещаться в разных каталогах и будут отслеживать разные папки и запускать разные командные файлы. Taskkill / IM powershell.exe / F

TIMEOUT /T 2

powershell.exe -windowstyle hidden -file D:\tdp\bin\UpgradeSIGMA\SS_DS_UPGRADE.ps1
TIMEOUT /T 2
powershell.exe -windowstyle hidden -file D:\tdp\bin\UpgradeSchema\SCHEMA_UPGRADE.ps1

2) Оба сценария PS1 контролируют папку и должны записывать в файл журнала, если предпринимаются какие-либо действия, как описано ниже. Если я запускаю пакетный файл вручную (пункт 1), то это работает нормально, но только если он запускается моим пользователем на сервере, если другие запускают его, для некоторых он работает, а для некоторых - нет. Это не работает полностью для всех, кроме меня.

$action = { $path = $Event.SourceEventArgs.FullPath
            $changeType = $Event.SourceEventArgs.ChangeType
            $logline = "$(Get-Date), $changeType, $path"
            Add-content "D:\tdp\bin\UpgradeOBJECT\logs\PowerShellLog.log" -value $logline                                
          }  

3) Powershell больше не запускает пакетный файл. Хотя это произойдет только для других пользователей, а не для меня. Раньше это тоже срабатывало. Без Powershell процесс работает нормально и работает так, как я ожидал. Поэтому, если я запусту следующие командные файлы, они дадут правильный результат, но также и для меня. Для других пользователей могут быть некоторые файлы, не прикрепленные при отправке электронного письма по PL / SQL, для некоторых это будет зависать в середине процедуры. Для меня это работает.

$action2 = { 
            cmd.exe /c "D:\tdp\bin\UpgradeOBJECT\upgrade_PNL_OBJECT_680.bat"
            cmd.exe /c "D:\tdp\bin\UpgradeOBJECT\upgrade_OBJECT_680.bat"
           } 

4) Я запускаю эту задачу из планировщика задач ежедневно. Раньше это работало нормально, но теперь, если я запускаю его из планировщика задач, он вообще не работает. Только если я запускаю пакетный файл, который устанавливает его в фоновом режиме вручную.

       @echo off

   Taskkill /IM powershell.exe /F

TIMEOUT /T 2

powershell.exe -windowstyle hidden -file D:\tdp\bin\UpgradeSIGMA\UPGRADE_1.ps1
TIMEOUT /T 2
powershell.exe -windowstyle hidden -file D:\tdp\bin\UpgradeSchema\UPGRADE_2.ps1

5) Powershell отслеживает две разные директории (сейчас я создал две отдельные). Он должен запускать пакетный файл из двух разных каталогов и регистрировать изменения в двух разных папках. Я не думаю, что это проблема с папками, но просто чтобы быть уверенным, кто-нибудь может подтвердить?

6) Полный код Powershell таков:

Set-Location D:\tdp\bin\UpgradeSIGMA

    $watchSSDS = New-Object System.IO.FileSystemWatcher
    $watchSSDS.Path = "Y:\LA\QA\Build_Archive\PRODUCT\PRODUCT 6.8.0\Servers"
    $watchSSDS.Filter = "*.*"
    $watchSSDS.IncludeSubdirectories = $false
    $watchSSDS.EnableRaisingEvents = $true 



    $action = { $path = $Event.SourceEventArgs.FullPath
                $changeType = $Event.SourceEventArgs.ChangeType
                $logline = "$(Get-Date), $changeType, $path"
                Add-content "D:\tdp\bin\UpgradeSS\logs\PowerShellLog.txt" -value $logline

              }  

    $action2 = { 
                cmd.exe /c "D:\tdp\bin\UpgradeSS\upgrade_PNL_OBJECT_680.bat"
                cmd.exe /c "D:\tdp\bin\UpgradeSS\upgrade_OBJECT_680.bat"
               } 
    Register-ObjectEvent $watchSSDS "Created" -Action $action2

    Register-ObjectEvent $watchSSDS "Created" -Action $action
    Register-ObjectEvent $watchSSDS "Changed" -Action $action
    Register-ObjectEvent $watchSSDS "Deleted" -Action $action
    Register-ObjectEvent $watchSSDS "Renamed" -Action $action

    while ($true) {sleep 10}

Самая большая путаница Вот почему есть несколько различий, когда это запускается от разных пользователей. Все они будут зарегистрированы на этом же сервере. Отчаянный крик о помощи!

Аналогично следующему: PowerShell неправильно контролирует каталог

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...