Регистрация...

Eserv Forum / E3 / Eserv 3 Web and FTP Servers Support / PowerShell в Cgi

imported // (v1)
Продукты и услуги Скачать Документация Купить Поддержка Форумы Партнёрам Статьи О компании
Новости
12.10.2009
Переезд завершен
Здравствуйте.
Собираюсь приладить powershell как обработчик Cgi.
Сделал вот что:

Внес в CGI.rules.txt следующую строку
File *.ps1 | Cgi {HTTP[PowerShellBin]}
В EServ.ini
PowerShellBin="C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe"

Проблема состоит в том, что powershell.exe не понимает путь к скрипту, который выдает ему acWeb и говорит:
The term 'test.ps1' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.
At line:1 char:8
+ test.ps1 <<<<

Причина в принципе ясна. Powershell понимает только четкие пути к скрипту. т.е. powershell test.ps1 его не устроит, даже если test.ps1 находится в текущей папке. Ему подавай powershell .\test.ps1 Либо полный путь... powershell D:\wwwroot\test.ps1
Вот хотелось бы это как-то исправить.
 
Комментарии к этой версии (03.06.2008 12:55) [~psSnowman] 5cb6b8a7
АвторДатаТекстtags
pig03.06.2008 13:33
Попробуйте так:
File *.ps1 | Cgi {HTTP[PowerShellBin]} FILENAME MakeFullName $FILENAME S!
imported
psSnowman03.06.2008 14:16
pig пишет: Попробуйте так:

Не сработало.
Для проверки вставил в OnRequest.rules вот это:
FILENAME MakeFullName TYPE CR

Вот что пишет: D:\Eserv3.x\acWEB\.\notfound.html
Я в легком замешательстве...
imported
pig03.06.2008 16:01
Это от места вызова сильно зависит. Если корневой каталог сайта задан некорректно, то вполне может получиться и notfound.html.

Проверять результат преобразования файла надо после вызова http\CGI.rules
imported
psSnowman03.06.2008 17:14
Вот кусок CGI.rules
FILENAME TYPE CR \ File *.spf | Cgi c:\spf\spf375.exe File *.ps1 | Cgi "{HTTP[PowerShellBin]}" File *.php | Cgi {HTTP[PhpBin]}

В таком варианте выводится D:\wwwroot\test.ps1
Но ошибка почему-то остается.

Вот что я подставил:
File *.ps1 | Cgi "{HTTP[PowerShellBin]} D:\data\wwwroot\test.ps1"

И заработало. Но это только один скрипт работать будет. Как это по человечески сделать?
imported
pig03.06.2008 17:24
Я посмотрел по исходникам — там, оказывается, путь отрезается специально. Поэтому придётся использовать такую обманку:
File *.ps1 | Cgi "{HTTP[PowerShellBin]} {FILENAME MakeFullName}"

И при этом учитывать, что PowerShell получит в своей командной строке два параметра — полное имя файла с путём и одно имя без пути.
imported
psSnowman03.06.2008 17:31
А в кавычки эта обманка берет?
Ведь если по уму, то должно быть так
powershell.exe –noexit &”c:\myscript.ps1”

Знак & не обязателен, но кавычки желательно бы иметь.
imported
psSnowman03.06.2008 17:34
pig пишет: Я посмотрел по исходникам — там, оказывается, путь отрезается специально.

Странно. Не понимаю, зачем.

Последний вариант заработал. Но все-таки оперативное решение. Окончательным его назвать сложно. Но это уже вопрос к ac.
Спасибо за помощь. Подожду комментариев Андрея Черезова.
imported
Работает на Eserv/5.05567 (10.02.2020)