У меня работает скрипт 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 неправильно контролирует каталог
С уважением,