Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проблема с запуском скрипта в powershell (http://forum.oszone.net/showthread.php?t=330485)

Neerdex 13-10-2017 19:27 2770367

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

PHP код:

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 2770479

пути в скрипте указаны относительные, поэтому его работа зависит от текущей директории (в интерфейсе Планировщика заданий это называется Рабочая папка)

Neerdex 14-10-2017 16:15 2770529

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

Busla 14-10-2017 19:56 2770592

Neerdex, Что такое текущая директория?

Iska 14-10-2017 20:45 2770598

Токмо второе и десятое сообщения там надо пропускать не глядя, ибо такая мифология…

Neerdex 14-10-2017 21:23 2770604

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

Busla 15-10-2017 00:11 2770640

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

Neerdex 15-10-2017 00:46 2770651

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

Neerdex 15-10-2017 01:39 2770659

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

Busla 15-10-2017 11:43 2770707

Цитата:

Цитата Neerdex
команды -command "d:\путь\путь_к_директории_скрипта\" »

команды собственно и нет - это просто путь к директории

Цитата:

Цитата Neerdex
что делать конкретно? »

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

Цитата:

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

такое поведение не очень предусмотрено
но конкретно cd можно заменить указанием пути в поле "Рабочая папка"


Время: 20:14.

Время: 20:14.
© OSzone.net 2001-