通过SQL运行Powershell脚本

时间:2011-09-07 23:57:26

标签: sql powershell jobs

我有一个脚本,它针对名为Server1的SQLServer运行Invoke-SQLCmd。从中收集的数据被传递到另一个针对Server2触发的脚本,并将结果插回到Server 1上的表中。在每个Invoke-SQLCmd上,我使用了-user -password和一个具有sa的帐户两个系统上的权限。

当我从命令shell或Poershell ISE运行脚本时,我的数据被插入到表中,并且每件事都可以正常工作;当我从SQL中运行它时没有任何反应。当我使用xp_cmdshell时,我没有得到输出(返回“null”)。

xp_cmdshell 'powershell.exe -file c:\script.ps1 -ExecutionPolicy Unrestricted'

我已将其放入SQLjob并使用链接到我的域帐户的代理帐户,该帐户在两个方框上都具有管理员权限但仍未在作业历史记录中记录任何结果,并且我的表中没有数据在Server1上。

我做错了什么?如果从ISE起作用,这肯定会起作用吗?

2 个答案:

答案 0 :(得分:4)

我这样做没有任何问题,甚至创建了几篇博文:

http://sev17.com/2009/04/05/executing-powershell-in-sql-server

http://sev17.com/2010/11/29/executing-powershell-in-sql-server-redux

我正在做的另一件事是使用带有文件名的-command参数而不是-file,但这不应该有所不同。我还将文件名用双引号括起来,但如果脚本文件在文件路径中没有空格,这应该没有区别。

除此之外,我需要看看你的脚本在做什么。例如它是否连接到其他机器?你可以在powershell中运行一个简单的命令,比如'powershell -command get-command'吗?

答案 1 :(得分:2)

似乎我没有正确加载snapins。虽然我的SQLsnapins是为第一个会话加载的,但它并没有将它传递给运行invoke-SQLcmd的第二个PS脚本。我的第二个脚本确实添加了cmdlet管理单元,但这可能还不够。

它本来应该有效但无论出于何种原因,从这里添加脚本块修复它。 :/

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

感谢那些回复的人。