通过SQL运行PowerShell脚本
我有一个脚本,它针对名为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起作用,它肯定会起作用吗?
我还没有这样做的任何问题,甚至创造了一个情侣博客文章:
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'吗?
这似乎是我没有正确加载管理单元。虽然我的SQLsnapins是为第一个会话加载的,但并没有将它传递给正在运行invoke-SQLcmd的第二个PS脚本。我的第二个脚本确实添加了cmdlet管理单元,但这可能还不够。
它应该工作,但无论出于何种原因,从这里添加脚本块固定它。 :/
http://msdn.microsoft.com/en-us/library/cc281962.aspx
感谢那些回应。
我在做什么错?
我认为在提供的示例中存在错误。我本来期望:
xp_cmdshell 'powershell.exe -ExecutionPolicy Unrestricted -file c:\script.ps1'
因为:“文件必须在命令中的最后一个参数,因为文件参数名称后输入的所有字符都被解释为脚本文件路径,然后在脚本参数和他们的价值观。“
你的链接被破坏 –