通过SQL运行Powershell脚本

问题描述 投票:5回答:3

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

当我从命令外壳或Poershell ISE运行脚本时,我的数据被插入表中,并且一切正常。当我从SQL中运行它时,什么也没有发生。当我如下使用xp_cmdshell时,我没有输出(返回“ null”)。

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

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

我在做什么错?如果从ISE可以正常工作,这肯定可以工作吗?

sql powershell jobs
3个回答
4
投票

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

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

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

我做不同的一件事是将-command参数与文件名一起使用,而不是-file,但这没什么区别。我还将文件名括在双引号中,但是如果脚本文件的文件路径中没有空格,也不会造成任何影响。

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


2
投票

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

它应该可以工作,但是由于任何原因,从此处添加脚本块都会对其进行修复。 :/

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

感谢那些回答。


1
投票

我在做什么错?

我认为所提供的示例中有错误。我本来希望:

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

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

来源:PowerShell.exe Command-Line Help

© www.soinside.com 2019 - 2024. All rights reserved.