0

описание Я разработчик PHP/Linux, который должен использовать его для работы в среде Windows, поэтому я очень хорошо пропустил что-то принципиальное в вопросе , Я исследовал этот вопрос и не могу точно определить решение. Благодарим вас за помощь в продвижении.Powershell в пакетном файле, запущенном как проблема обслуживания

У меня есть командный файл, который вызывает сценарий powershell, который работает неправильно, когда он запускается планировщиком задач окна, но отлично работает, когда он запускается вручную.

Ниже приведен сценарий Powershell, что пакетный файл запуска ...

$WatchFolder = '\\networkshare\foldername' 
$Filter = '*.csv' 
$fsw = New-Object IO.FileSystemWatcher $WatchFolder, $Filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters] 'LastWrite'} 

Register-ObjectEvent $fsw Changed -SourceIdentifier SAS_Poll_FileChanged -Action {  
    $WatchFolder = '\\networkshare\foldername' 
    $OutputFolder_one = '\\networkshare\outputFolder_One' 
    $OutputFolder_two = '\\networkshare\outputFolder_Two' 

    $name = $Event.SourceEventArgs.Name 

    $lock_file = $WatchFolder + '\.' + $name + '.lock' 

    $test = (Test-Path "$lock_file") 

    if ($test){ 
     return 
    } else { 
     Set-ExecutionPolicy -Scope CurrentUser Bypass 
     Out-File -FilePath "$lock_file" 
     Start-Process powershell -ArgumentList ".\General\PollingProcess-alone.ps1 $WatchFolder $MainFrameFolder $SASFolder $name $lock_file" -NoNewWindow 
    } 

} 

Я знаю, что проблема возникает в следующей строке ...

Start-Process powershell -ArgumentList ".\General\PollingProcess-alone.ps1 $WatchFolder $MainFrameFolder $SASFolder $name $lock_file" -NoNewWindow 

Я знаю, что это б/с когда событие запускается (когда сценарий запускается через планировщик задач), создается файл блокировки, а затем зависает процесс.

Я поэтому думаю, что проблема связана с тем, что я запускаю второй скрипт powershell, но я не знаю, как это исправить. Я попытался использовать полный путь второго скрипта, но не смог заставить его работать.

Просто для того, чтобы дать вам более контекст сценария, важно, чтобы процесс события запустил новый скрипт powershell. B/c Мне нужны эти сценарии для запуска одновременно.

ответ

1

Довольно точно, проблема связана с вашим списком аргументов, прямо сейчас вы передаете одну строку со всем, что содержится внутри нее, измените это на массив, и все должно работать правильно.

так конвертировать ".\General\PollingProcess-alone.ps1 $WatchFolder $MainFrameFolder $SASFolder $name $lock_file"

в ".\General\PollingProcess-alone.ps1",$WatchFolder,$WatchFolder,etc..

дать, что выстрел и дайте нам знать, если он работает для вас, также хочу сказать, что ваш код впечатляет быть относительно новым для PowerShell так престижность лол.

+0

Изменение передачи параметров в массив было 1 из 2 вещей, которые я сделал не так со всем этим. Другой вопрос, который у меня был, это то, как я настраивал запланированную задачу. В действии запланированной задачи я удалил путь к скрипту, который я вызывал, и переместил путь к опции «Начать». Сочетание этих двух изменений, похоже, решило мою проблему. Еще раз спасибо за помощь. Хотел бы я взять кредит на большую часть этого кода, но это действительно дань уважения Powershell и насколько хорошо документирован язык. –

 Смежные вопросы

  • Нет связанных вопросов^_^