在 SQL 中运行 Powershell 脚本

6
我有一个脚本,运行Invoke-SQLCmd命令连接到名为Server1的SQLServer。从那里收集的数据传递给另一个脚本,该脚本针对Server2启动,并将结果插入回Server 1上的表中。在每个Invoke-SQLCmd中,我都使用了-user -password参数,并使用具有两个系统的sa权限的帐户。当我从命令行或PowerShell ISE运行脚本时,我的数据被插入到表中,一切正常;但是,当我从SQL内部运行它时,什么也没有发生。当我使用下面的xp_cmdshell时,我没有任何输出(返回"null")。
xp_cmdshell 'powershell.exe -file c:\script.ps1 -ExecutionPolicy Unrestricted'

我已将其放入 SQL 作业中,并使用了一个代理帐户,该代理帐户链接到我的域帐户,在两个服务器上都具有管理员权限,但作业历史记录中没有记录任何结果,在 Server1 上的表中也没有数据。

我哪里做错了?如果从 ISE 中工作,这肯定应该可以运行吧?

3个回答

4
我没有遇到任何问题,甚至创建了几篇博客文章:
http://sev17.com/2009/04/05/executing-powershell-in-sql-server (镜像)
http://sev17.com/2010/11/29/executing-powershell-in-sql-server-redux (镜像)
我所做的唯一不同之处是使用-file参数的文件名来代替-command参数,但这不应该有任何区别。如果脚本文件路径中没有空格,则还可以将文件名用双引号括起来,但这也不应有任何区别。
除此之外,我需要查看您的脚本正在执行什么操作。例如,它是否连接到其他计算机?您能否在PowerShell中运行一个简单的命令,例如 'powershell -command get-command'?

3
你的链接已经损坏。 - Gregor y

2

看起来我没有正确加载快照。虽然我的SQL快照在第一个会话中已经加载,但它没有传递到正在运行invoke-SQLcmd的第二个PS脚本。我的第二个脚本确实添加了cmdlet快照,但可能还不够。

理论上它应该能正常工作,但出于某种原因,从这里添加的脚本块解决了问题。 :/

http://msdn.microsoft.com/en-us/library/cc281962.aspx

感谢回复的人。


1
我做错了什么?
我认为提供的示例中有一个错误。我本来期望是:
xp_cmdshell 'powershell.exe -ExecutionPolicy Unrestricted -file c:\script.ps1'

原因是:“文件必须是命令中的最后一个参数,因为在文件参数名称之后键入的所有字符都将被解释为脚本文件路径,后跟脚本参数及其值。”

来源:PowerShell.exe 命令行帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接