#powershell #cmd #alteryx
#powershell #cmd #alteryx
Вопрос:
У меня есть скрипт Powershell, который вызывает аналитическое приложение Alteryx (мастер) и вводит в него один параметр с помощью .xml — метод, используемый для этого, здесь.
Инструменты вывода в рабочем процессе Alteryx настроены как относительные пути для хранения выходных данных в папке ввода и рабочей папке, которые находятся на уровень выше самого приложения, например:
..InputFileName.yxdb
Если я открываю рабочий процесс Alteryx и запускаю его или запускаю приложение через интерфейс, оно работает абсолютно нормально, и мои выходные данные сохраняются правильно. Однако при запуске через Powershell с использованием кода,
$modules = "C:Projects2019Modules"
cd $modules
AlteryxEngineCmd.exe .Extract_Variables.yxwz ._Version.xml
возвращает следующие ошибки:
Error - ToolId 5: Cannot access the folder .Input.
Error - ToolId 15: Cannot access the folder .Working.
Error - ToolId 24: Cannot access the folder .Input.
Error - ToolId 26: Cannot access the folder .Input.
несмотря на то, что относительные пути работают нормально, если запускаются непосредственно внутри рабочего процесса. Powershell нормально запустит рабочий процесс Alteryx, но не сможет сохранить выходные данные.
В качестве теста я переместил папки ввода и Рабочие папки на тот же уровень, что и само приложение, и это сработало нормально — файлы сохраняются в этих тестовых папках — так что Powershell как будто не понимает, что две точки обозначают повышение уровня. На самом деле, я могу написать
..............InputFileName.yxdb
и он все равно будет выводиться в папку тестового ввода, которую я создал вместе с самим приложением Alteryx. Кто-нибудь знает, почему это так?
Комментарии:
1. Похоже, приложение неправильно считывает ваш рабочий каталог. Я бы посоветовал использовать
Start-Process
и указать рабочий каталог, где вам это нужно.2. @TheIncorrigible1 Можете ли вы привести пример этого для моего процесса, который вызывал бы мой AlteryxEngineCmd.exe ?
Ответ №1:
Чтобы дополнить мой комментарий примером того, как выполнить ваше приложение с помощью Start-Process
. Во-первых, предположение о файловой структуре:
- C:Projects2019
|-- Modules
|-- AlteryxEngineCmd.exe
|-- Extract_Variables.yxwz
|-- _Version.xml
|-- Input
|-- FileName.yxdb
|-- Working
И код:
$processParams = @{
FilePath = '.ModulesAlteryxEngineCmd.exe'
ArgumentList = '.ModulesExtract_Variables.yxwz', '.Modules_Version.xml'
WorkingDirectory = 'C:Projects2019'
NoNewWindow = $true
Wait = $true
PassThru = $true
}
Start-Process @processParams
Примечание: Я использовал метод, называемый splatting, для передачи всех параметров в Start-Process
из hashtable
для удобства чтения.
Комментарии:
1. К сожалению, я получаю проблемы. Если я запущу скрипт, AlteryxEngineCmd.exe открывается окно командной строки, но больше ничего не происходит — как будто ему не передаются параметры списка аргументов. Я попытался передать ему более простой рабочий процесс (не приложение, которому нужны параметры .xml), и это просто открывает и закрывает окно cmd, поэтому я получаю смешанные результаты.
2. Мне удалось исправить это, используя мой первоначальный метод. Проблема заключалась в ненужном использовании ` . ` при указании моего рабочего процесса и файла .xml.
Ответ №2:
Я обнаружил проблему, которая заключалась в простом непонимании синтаксиса. Мой рабочий каталог выглядит следующим образом:
- C:Projects2019
|-- Modules
|-- AlteryxEngineCmd.exe
|-- Extract_Variables.yxwz
|-- _Version.xml
|-- Input
|-- FileName.yxdb
|-- Working
Затем в Powershell необходимо вызвать мастер Alteryx следующим образом:
$modules = "C:Projects2019Modules"
cd $modules
AlteryxEngineCmd.exe Extract_Variables.yxwz _Version.xml
Обратите внимание, что при вызове wizrd и xml-файла нет необходимости в .
. Использование .
приведет к успешному вызову модуля, но повлияет на относительные пути, установленные внутри него.