SSIS 运行运行 powershell 脚本但 SSMS 不运行的包
Posted
技术标签:
【中文标题】SSIS 运行运行 powershell 脚本但 SSMS 不运行的包【英文标题】:SSIS runs package that runs powershell script but SSMS don't 【发布时间】:2020-08-07 19:48:32 【问题描述】:我在 SSIS 上有一个包,它执行一个 .BAT 文件,然后执行一个 PowerShell 文件,该文件从文件夹中获取文件元数据,生成一个 CSV 文件。
我已经为 SQL Server 代理用户授予了对该文件夹的访问权限,但它不起作用。
当我在 SSIS 上运行包时,它可以正常工作!但是,如果我通过 SSMS 中的 JOB 执行相同的包,它会结束该步骤,但没有执行 .BAT 文件,或者如果是,Powershell 文件没有执行,因为执行后 CSV 文件为“1kb” ,没有数据。
我是不是忘记了什么?
SSIS 包(葡萄牙语):
[编辑 1]
我注意到的一件奇怪的事情是,我们有 3 个由 SSMS 安排的包,但只有一个不起作用,也就是问题中提到的那个。但我不知道为什么或对其他人有什么不同。
2 个包从 Sharepoint 中提取信息并在 SSMS 上工作,但另一个从文件中提取元数据的包没有。
【问题讨论】:
为什么要使用bat文件来运行powershell文件?为什么不直接运行powershell文件呢? @Larnu 好问题,我从来没有尝试过直接从 SSIS 运行 powershell 而不是运行 BAT 文件。实际上,我什至不知道该怎么做。但无论如何,该软件包在 SSIS 上运行,为什么不能在 SSMS 上正常运行? 检查 SSISDB 中的日志,如果您已将日志记录添加到批处理文件中,它们将公开更多信息。 将运行 PowerShell 的帐户是否设置了适当的 ExecutionPolicy?在 PS6 之前,默认设置为 RestrictedGet-ExecutionPolicy
,您需要将其设置为远程签名 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
@billinkc 我在我的 PS 脚本上方添加了您的行,我之前拥有的是 Set-ExecutionPolicy Bypass -Scope Process
【参考方案1】:
检查作业步骤的“运行方式”值,它是“代理”(在 SSMS 的对象资源管理器中可见。
打开代理(SQL Server 代理 >> 代理 >> SSIS 包执行)。它将列出凭据名称。
打开凭据(安全 >> 凭据)。它将列出一个身份。 那是需要配置安全性的用户。
【讨论】:
我没有做对,但是在我的 SQL Server Management Studio 18.5 (2019) 中,作业步骤的高级下没有run as
。同样在Proxy
文件夹中,它是空的。我应该做点什么吗?
它在“常规”下,而不是“高级”下。查看新增截图
对不起,我确实在错误的选项卡中。 Run As
中的用途是 SQL Server 代理。但是我的Proxy
文件夹是空的,Credential
也是管理员帐户。
我添加了Proxy
并更改了以该用户身份运行的步骤,但效果不佳。另外,我用更多信息更新了这个问题。
作业历史显示什么?成功还是失败?有详细的消息吗?【参考方案2】:
打开cmd
窗口并运行runas /user:<userGoesHere> cmd
并在出现提示时输入密码。见documentation of runas
here
现在,它会打开第二个cmd
窗口,该窗口在 SQL Server 代理中使用的此用户下运行。执行你的批处理文件,看看你是否会发现任何错误。
此外,您正在运行的进程可能需要用户拥有Log on as a batch job
权限。从管理员帐户运行 secpol.msc
并将此用户添加到此权限。
【讨论】:
以上是关于SSIS 运行运行 powershell 脚本但 SSMS 不运行的包的主要内容,如果未能解决你的问题,请参考以下文章
用于在链接服务器上执行 DDL 语句的 Powershell 脚本 - 使用 SSIS 运行时不起作用
确定当前的 PowerShell 进程是 32 位还是 64 位?
带有生成Excel文件脚本的SSIS项目在vs中可以执行成功,但部署到sql server中执行就报错调用目标发生异常