如何执行可执行路径来自用户变量的Process Task

时间:2011-07-25 15:23:23

标签: visual-studio-2005 ssis bids

我有一个包含Process Task的SSIS包。流程任务需要执行批处理文件。批处理文件的位置因环境(开发,生产)而异。

如何动态设置Process Task对象的Executable属性值为用户变量? enter image description here enter image description here

3 个答案:

答案 0 :(得分:19)

我认为你需要创建一个变量,它接受文件夹路径和可执行文件名作为表达式进行评估。然后,您需要将此变量作为表达式分配给Execute Process Task的可执行属性。此外,您需要在设计期间拥有有效的可执行路径。

这是一个粗略的分步示例,说明如何将变量传递给Execute Process Task的Executable属性。该示例是使用SSIS 2008 R2创建的,并且还使用三个.bat文件来说明功能。尽管该示例位于SSIS 2008 R2中,但该逻辑应适用于SSIS 2005。

创建三个.bat文件,即Process_0.bat,Process_1.bat和Process_2.bat。参考屏幕截图#1 。使用echo命令填充它们,如屏幕截图#2 - #4 所示。

创建SSIS包。我在开头的YYYYMMDD_hhmm格式中命名了包,然后是SO代表Stack Overflow,后面是SO问题ID,最后是描述。这对我来说很容易在以后再提到。请参阅屏幕截图#5

创建以下变量:参考屏幕截图#6

  • ExecutableFileName - 此变量的类型为字符串。它将包含可执行文件名。

  • ExecutableFolder - 此变量的类型为字符串。它将包含可执行文件'文件夹路径。

  • ExecutableFilePath - 此变量的类型为字符串。不要键入此变量的任何值。这将是一个表达式,它结合了变量ExecutableFolder和ExecutableFileName来生成完整的文件路径。参考屏幕截图#7 。选择变量,然后按F4打开属性窗口。将EvaluateAsExpression设置为True并将表达式设置为@[User::ExecutableFolder] + @[User::ExecutableFileName]

  • ExecutableOutput - 此变量的类型为字符串。它将存储可执行文件的输出值。在这种情况下,.bat文件回显的值。

在包的控制流路径上,放置执行流程任务和脚本任务,如屏幕截图#8 所示。

配置执行流程任务,如屏幕截图#9 - #11 所示。在Task的Process部分,您需要为初始配置指定可执行路径。另外,指定StandardOutputVariable(这是针对此示例)。在“表达式”部分,通过指定变量@ [User :: ExecutablePath]

来覆盖可执行文件路径

在脚本任务中,替换主要方法,如屏幕截图#12 - #13 所示。

执行包。您应该获得输出,如屏幕截图#14 所示。它显示了.bat文件Process_0.bat是使用输出"Process 0"执行的。

现在,将变量ExecutableFileName的值更改为Process_1.bat。不要做任何其他更改。执行包。您应该获得输出,如屏幕截图#15 - #16 所示。它显示了.bat文件Process_1.bat是使用输出"Process 1"执行的。

现在,将变量ExecutableFileName的值更改为Process_2.bat。不要做任何其他更改。执行包。您应该获得输出,如屏幕截图#17 - #18 所示。它显示了.bat文件Process_2.bat是使用输出"Process 2"执行的。

希望有所帮助。

<强>截图:

<强>#1:

1

<强>#2:

2

<强>#3:

3

<强>#4:

4

<强>#5:

5

<强>#6:

6

<强>#7:

7

<强>#8:

8

<强>#9:

9

<强>#10:

10

<强>#11:

11

<强>#12:

12

<强>#13:

13

<强>#14:

14

<强>#15:

15

<强>#16:

16

<强>#17:

17

<强>#18:

18

答案 1 :(得分:2)

我写这篇评论的原因是我有类似的错误

Package Validation Error Error at @#@#@# [Execute Process Task]: The executable is not specified.

而我所要做的就是在Variable的EvaluateAsExpression中选择TRUE。仅供参考,我的价值表达是“C:\ PortableApps \ winscp517 \ WinSCP.exe”

HTH!

答案 2 :(得分:0)

我知道这个话题有点老了,但这就是你要做的。

  1. 不要编辑流程任务,而是右键单击并单击“属性”
  2. 进入属性后,向下滚动到“表达式”
  3. 在“表达式”旁边,您会看到三个点。点击三个点
  4. 添加“可执行”属性,然后在表达式部分中单击三个点以选择您的变量。您还可以为“参数”添加第二个属性。如果您正在运行批处理脚本或 powershell 脚本,这很有用

就我而言,我想调用批处理脚本。脚本的路径根据我所处的环境而变化。所以我有一个变量,它将设置批处理脚本的正确路径。我还有另一个参数变量,它也根据地区而变化。

如果您现在返回“编辑”您的流程任务,您将看到可执行文件和参数是自动填充的