我有一个Powershell脚本调用Alteryx分析应用程序(向导)并通过.xml输入一个参数 - 用于执行此操作的方法是here。
Alteryx工作流程中的输出工具被设置为将输出存储到输入和工作文件夹的相对路径,这些路径高于应用程序本身,例如:
..\Input\FileName.yxdb
如果我打开Alteryx工作流程并运行它,或通过界面运行应用程序,它可以正常工作,我的输出正确存储。但是,使用代码通过Powershell运行它,
$modules = "C:\Projects\2019\Modules"
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不理解两个点代表向上移动水平。事实上,我可以写
..............\Input\FileName.yxdb
它仍会输出到我与Alteryx应用程序本身一起创建的测试输入文件夹。任何人都知道为什么会这样吗?
要通过Start-Process
执行应用程序的示例扩展我的评论。首先,关于文件结构的假设:
- C:\Projects\2019
|-- Modules
|-- AlteryxEngineCmd.exe
|-- Extract_Variables.yxwz
|-- _Version.xml
|-- Input
|-- FileName.yxdb
|-- Working
和代码:
$processParams = @{
FilePath = '.\Modules\AlteryxEngineCmd.exe'
ArgumentList = '.\Modules\Extract_Variables.yxwz', '.\Modules\_Version.xml'
WorkingDirectory = 'C:\Projects\2019'
NoNewWindow = $true
Wait = $true
PassThru = $true
}
Start-Process @processParams
注意:我使用了一种名为splatting的技术,将所有参数从Start-Process
传递给hashtable
以提高可读性。
我发现了这个问题,这是一个简单的语法误解。我的工作目录如下:
- C:\Projects\2019
|-- Modules
|-- AlteryxEngineCmd.exe
|-- Extract_Variables.yxwz
|-- _Version.xml
|-- Input
|-- FileName.yxdb
|-- Working
然后,Alteryx向导需要在Powershell中调用如下:
$modules = "C:\Projects\2019\Modules"
cd $modules
AlteryxEngineCmd.exe Extract_Variables.yxwz _Version.xml
请注意,在调用wizrd和.xml文件时不需要.\
。使用.\
将成功调用模块,但会影响其中设置的相对路径。