我有一个Powershell脚本,该脚本调用Alteryx解析应用程序(向导)并通过.xml向其中输入一个参数-用于执行此操作的方法是here。
Alteryx工作流程中的输出工具被设置为相对路径,以将输出存储到应用程序本身上方的 Input 和 Working 文件夹,例如:< / p>
..\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工作流,但是无法保存输出。
作为测试,我将 Input 和 Working 文件夹移到了与应用本身相同的级别,并且工作正常-文件保存到了这些测试文件夹中-因此好像Powershell无法理解代表向上移动的两个点。其实我可以写
..............\Input\FileName.yxdb
,它仍然会输出到我与Alteryx应用程序本身一起创建的test Input文件夹中。有人知道为什么会这样吗?
答案 0 :(得分:1)
举例说明如何使用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
,以提高可读性。
答案 1 :(得分:0)
我发现了这个问题,这是对语法的简单误解。我的工作目录如下:
- 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文件时不需要.\
。使用.\
将成功调用该模块,但会影响其中设置的相对路径。