SSIS 运行 具有自定义功能的 Powershell (psm1's)
SSIS Running Powershell with Custom Functions (psm1's)
首先让我说我不是 Powershell 的新手,但我 是自定义函数的新手。
所以我创建了一个自定义函数(使用一个 cmd-let)来处理我们数据库的日志记录。它就像一个魅力。我们称它为 write-myfunction。
起初,当我在 ISE 中 运行 它工作时它工作,但随后在调度程序上不起作用。我通过将带有 PSM1 的托管文件夹添加到我的 PATH powershell 变量来解决这个问题。繁荣。现在它适用于调度程序。伟大的。精彩的。继续前进。
现在的问题是我们正在 运行ning SSIS(同一 GA 用户)并让 SSIS 调用 powershell 脚本,它似乎没有找到我的 psm1。我得到
“write-myfunction 不是 cmd-let blahblah 的有效名称”
值得注意:我将我的函数文件夹托管在我们的网络共享中,该文件夹具有完全开放的权限(我将其备份到每日和警报中,因此如果该文件夹中的某些内容发生变化,我会收到警报)
问题!
- 在其他服务器上保留自定义模块的中央存储库是明智之举吗?我是否应该将该文件夹的副本部署到 c:\program files\powershell 而不是通过 GP 部署到每台计算机?
- 我在这个 SSIS 上遗漏了什么?我想如果我 运行 作为 AD GA 帐户,它应该可以访问带有脚本的文件夹,而且 SSIS 包在我编辑 PATH 变量的本地系统上 运行ning包含我的托管模块文件夹吗?所以..喜欢..做什么?
*编辑
这是我能够解决第一个问题的地方:
这里是我确认我可以 GCI 到 powershell 中的托管文件 window
1:是的! 将您的模块放在中央备份的某个地方,并考虑将它们添加到 git 存储库以跟踪随时间的变化。如果您与他人共享位置,请注意权限!
另请注意,如果远程服务器不是 powershell 的“受信任位置”,您可能必须在 运行 脚本之前管理您的执行策略设置 and/or Unblock-File
。
2:(假设您 运行 服务器上的 SSIS 包)SSIS 通常在您连接的服务器上本地运行命令。您需要确保服务器可以连接到您的共享位置 并且 服务帐户 运行 服务器实例具有访问权限。
您的 SSIS 任务是什么样的?我会使用执行流程任务:
Executable: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Arguments: -ExecutionPolicy Unrestricted -command '\path\to\script.ps1'
其中 script.ps1
包含:
# Import your custom modules:
Import-Module '\path\to\module.psm1'
# Run your custom functions
Write-MyFunction -foo X -bar Y
Check out this write-up 了解有关软件包本身的更多详细信息
如果脚本仍然存在问题 运行,请尝试将脚本保存在服务器本地。 Windows 对二次跃点远程处理有一些限制,这可能会使通过 SSIS 访问文件共享变得困难。
首先让我说我不是 Powershell 的新手,但我 是自定义函数的新手。
所以我创建了一个自定义函数(使用一个 cmd-let)来处理我们数据库的日志记录。它就像一个魅力。我们称它为 write-myfunction。
起初,当我在 ISE 中 运行 它工作时它工作,但随后在调度程序上不起作用。我通过将带有 PSM1 的托管文件夹添加到我的 PATH powershell 变量来解决这个问题。繁荣。现在它适用于调度程序。伟大的。精彩的。继续前进。
现在的问题是我们正在 运行ning SSIS(同一 GA 用户)并让 SSIS 调用 powershell 脚本,它似乎没有找到我的 psm1。我得到 “write-myfunction 不是 cmd-let blahblah 的有效名称”
值得注意:我将我的函数文件夹托管在我们的网络共享中,该文件夹具有完全开放的权限(我将其备份到每日和警报中,因此如果该文件夹中的某些内容发生变化,我会收到警报)
问题!
- 在其他服务器上保留自定义模块的中央存储库是明智之举吗?我是否应该将该文件夹的副本部署到 c:\program files\powershell 而不是通过 GP 部署到每台计算机?
- 我在这个 SSIS 上遗漏了什么?我想如果我 运行 作为 AD GA 帐户,它应该可以访问带有脚本的文件夹,而且 SSIS 包在我编辑 PATH 变量的本地系统上 运行ning包含我的托管模块文件夹吗?所以..喜欢..做什么?
*编辑
这是我能够解决第一个问题的地方:
这里是我确认我可以 GCI 到 powershell 中的托管文件 window
1:是的! 将您的模块放在中央备份的某个地方,并考虑将它们添加到 git 存储库以跟踪随时间的变化。如果您与他人共享位置,请注意权限!
另请注意,如果远程服务器不是 powershell 的“受信任位置”,您可能必须在 运行 脚本之前管理您的执行策略设置 and/or Unblock-File
。
2:(假设您 运行 服务器上的 SSIS 包)SSIS 通常在您连接的服务器上本地运行命令。您需要确保服务器可以连接到您的共享位置 并且 服务帐户 运行 服务器实例具有访问权限。
您的 SSIS 任务是什么样的?我会使用执行流程任务:
Executable: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Arguments: -ExecutionPolicy Unrestricted -command '\path\to\script.ps1'
其中 script.ps1
包含:
# Import your custom modules:
Import-Module '\path\to\module.psm1'
# Run your custom functions
Write-MyFunction -foo X -bar Y
Check out this write-up 了解有关软件包本身的更多详细信息
如果脚本仍然存在问题 运行,请尝试将脚本保存在服务器本地。 Windows 对二次跃点远程处理有一些限制,这可能会使通过 SSIS 访问文件共享变得困难。