0

我有一个 Powershell 脚本,它调用 Alteryx 分析应用程序(向导)并通过 .xml 向其中输入一个参数 - 用于执行此操作的方法是这里

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 工作流,但无法保存输出。

作为测试,我将InputWorking文件夹移动到与应用程序本身相同的级别,这工作正常 - 文件保存到这些测试文件夹 - 所以好像 Powershell 不理解这两个点来表示向上移动等级。其实我可以写

..............\Input\FileName.yxdb

它仍然会输出到我与 Alteryx 应用程序本身一起创建的测试输入文件夹。有谁知道为什么会这样?

4

2 回答 2

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-Processfrom a hashtable

于 2019-03-15T16:36:27.343 回答
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 文件时不需要。Using.\将成功调用模块,但会影响其中设置的相对路径。

于 2019-03-18T16:35:39.657 回答