2011-09-07 143 views
4

我有一个脚本,它针对名为Server1的SQLServer运行Invoke-SQLCmd。从该服务器收集的数据传递给另一个针对Server2的脚本,并将结果插回服务器1上的一个表中。在每个Invoke-SQLCmd中,我都使用了-user -password和一个拥有sa两个系统上的权限。通过SQL运行PowerShell脚本

当我从命令shell或Poershell ISE运行脚本时,我的数据被插入到表中,并且每件事情都正常工作;当我从SQL内部运行它时,什么都不会发生。如下所示,我使用xp_cmdshell时没有输出(返回“null”)。

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

我已经把它变成一个SQLjob和使用链接到有两个箱子管理权,但仍没有记录在作业历史结果,并没有数据,我在Server1上表我的域帐户的代理帐户。

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

回答

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'吗?

+0

你的链接被破坏 –

1

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

它应该工作,但无论出于何种原因,从这里添加脚本块固定它。 :/

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

感谢那些回应。

0

我在做什么错?

我认为在提供的示例中存在错误。我本来期望:

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

因为:“文件必须在命令中的最后一个参数,因为文件参数名称后输入的所有字符都被解释为脚本文件路径,然后在脚本参数和他们的价值观。“

来源:PowerShell.exe Command-Line Help