PDA

Показать полную графическую версию : Проблема с запуском скрипта в powershell


Neerdex
13-10-2017, 19:27
Помогите решить проблему. Суть следующая: есть скрипт "start.ps1", который нормально запускается и работает через "ПКМ/Выполнить с помощью PowerShell", но если я попытаюсь запустить сначала сам PowerShell и потом прописать путь к скрипту, то он выдает ошибку.


param (
[string]$php = "",
[switch]$Loop = $true
)

if($php -ne ""){
$binary = $php
}elseif(Test-Path "bin\php\php.exe"){
$env:PHPRC = ""
$binary = "bin\php\php.exe"
}else{
$binary = "php"
}

if(Test-Path "PocketMine-MP.phar"){
$file = "PocketMine-MP.phar"
}elseif(Test-Path "src\pocketmine\PocketMine.php"){
$file = "src\pocketmine\PocketMine.php"
}else{
echo "Couldn't find a valid PocketMine-MP installation"
pause
exit 1
}

function StartServer{
$command = "powershell " + $binary + " " + $file + " --enable-ansi"
iex $command
}

$loops = 0

StartServer

while($Loop){
if($loops -ne 0){
echo ("Restarted " + $loops + " times")
}
$loops++
echo "To escape the loop, press CTRL+C now. Otherwise, wait 5 seconds for the server to restart."
echo ""
Start-Sleep 5
StartServer
}

Собственно, в качестве ошибки он выдает данную строку из самого кода: echo "Couldn't find a valid PocketMine-MP installation", после чего ругается на "pause".

Никак не могу с этим разобраться. По факту, мне нужно это дело запускать Планировщиком, что я сначала и пытался делать, путем запуска powershell.exe с аргументом -File путь\start.ps1 (что не сработало).

Busla
14-10-2017, 12:24
пути в скрипте указаны относительные, поэтому его работа зависит от текущей директории (в интерфейсе Планировщика заданий это называется Рабочая папка)

Neerdex
14-10-2017, 16:15
Да, я уже думал об этом, но тогда почему я не могу вручную через Шелл запустить скрипт указав путь к нему? Ошибка та же, что и в планировщике. К тому планировщик стартует сначала шелл, а потом аргументом прописывается команда на запуск файла по полному пути к файлу. Непонятно все равно.

Busla
14-10-2017, 19:56
Neerdex, Что такое текущая директория? (http://forum.oszone.net/thread-29570.html)

Iska
14-10-2017, 20:45
Токмо второе и десятое сообщения там надо пропускать не глядя, ибо такая мифология…

Neerdex
14-10-2017, 21:23
Busla, спасибо вам за ответы но, если я не ошибаюсь, то вы говорите совсем не о том. Рабочая папка (текущая директория) здесь не при чем - файл прекрасно находится вручную из Шелл и запускается, но выдает ошибку в самом скрипте. Более того, я даже прописал путь к скрипту в переменной среде в PATH - результат тот же, файл находится, скрипт запускается, но выдает ошибку в работе. При этом запуская скрипт напрямую из папки через "ПКМ-Выполнить с помощью powershell" - скрипт прекрасно работает...

Busla
15-10-2017, 00:11
Neerdex, ошибаетесь.
Скрипт вам пишет, что не может найти PocketMine.php в подкаталоге той директории, из которой запускаете. Не где скрипт находится, а место в файловой системе, которое вы сейчас рассматриваете, в powershell оно обычно подписано справа от курсора в командной строке.

Neerdex
15-10-2017, 00:46
Busla, я извиняюсь, но можно как-то более простым языком объяснить, что делать конкретно? Просто я не совсем понимаю, ведь PocketMine.phar находится в той же директории, что и скрипт.

Neerdex
15-10-2017, 01:39
Хм, кажется, я немного продвигаюсь вперед к решению проблемы. Вы, Busla, были правы, простой запуск ps.exe и указание рабочей папки командой cd d:\путь\ и затем start.ps1 - запустило скрипт корректно. Но вот планировщик все никак не хочет слушаться... У меня в нем настроен запуск powershell.ехе, далее в аргументе указываю выполнение команды -command "d:\путь\путь_к_директории_скрипта\" чтобы просто убедиться в правильности первого шага, но шелл выпадает открывается на долю секунды, жалуясь примерно такой ошибкой "в строке начинающейся с cd... отсутствует терминатор бла бла бла" - что-то в этом духе.
Как мне все-таки запустить через планировщик powershell.exe чтобы он выполнил команду cd d:\мой_путь и на этом ждал дальнейших команд?

Busla
15-10-2017, 11:43
команды -command "d:\путь\путь_к_директории_скрипта\" »
команды собственно и нет - это просто путь к директории

что делать конкретно? »
в планировщике, в поле Рабочая папка прописать путь к директории, где лежит ваш скрипт

Как мне все-таки запустить через планировщик powershell.exe чтобы он выполнил команду cd d:\мой_путь и на этом ждал дальнейших команд? »
такое поведение не очень предусмотрено
но конкретно cd можно заменить указанием пути в поле "Рабочая папка"




© OSzone.net 2001-2012