【问题标题】:How to execute a Process Task where the Executable path comes from a user Variable如何执行可执行路径来自用户变量的流程任务
【发布时间】:2011-07-25 15:23:22
【问题描述】:

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

如何将 Process Task 对象的 Executable 属性的 tghe 值动态设置为用户变量?

【问题讨论】:

  • 到目前为止,您似乎采取了正确的方法。您能否提供更多有关您进入这些屏幕所采取的步骤的信息?创建此任务时,RenameFile.cmd 是否已经存在?
  • 当通过表达式设置可执行文件时,确保DelayValidation 设置为Process Task 上的True。见stackoverflow.com/a/18106491/692942

标签: visual-studio-2005 ssis bids


【解决方案1】:

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

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

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

创建一个 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 文件回显的值。

在包的控制流路径上,放置 Execute Process Task 和 Script Task,如屏幕截图 #8 所示。

如屏幕截图 #9 - #11 所示配置执行流程任务。在 Task 的 Process 部分,您需要为初始配置指定一个 Executable 路径。此外,指定 StandardOutputVariable(此示例用于此示例)。在 Expressions 部分,通过指定变量 @[User::ExecutablePath]

覆盖 Executable 路径

在脚本任务上,替换屏幕截图中显示的 Main 方法 #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:

#2:

#3:

#4:

#5:

#6:

#7:

#8:

#9:

#10:

#11:

#12:

#13:

#14:

#15:

#16:

#17:

#18:

【讨论】:

  • imgur 被我屏蔽了,但是一个元帖子向我指出了这个解决方案:获取这个问题的 url 并将其放入谷歌图片中。图片不是很好,但足以提供帮助。
【解决方案2】:

我写这篇评论的原因是我遇到了类似的错误

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

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

HTH!

【讨论】:

    【解决方案3】:

    我知道这个话题有点老了,但你会这样做。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多