如何在Tidal的PowerShell脚本中运行Invoke-Sqlcmd

时间:2016-06-28 17:03:10

标签: powershell tidal-scheduler

我有一个PowerShell脚本(test.ps1),它通过Invoke-Sqlcmd执行一个简单的SQL查询。该脚本位于远程文件共享服务器上。以下是剧本:

param
(
[string]$SQL_username,
[string]$SQL_password
)

Write-Host ('begin script')
$db = 'some_DB'
$server = 'some_IP'
$query = 'SELECT TOP 10 * FROM some_schema.some_table'
Invoke-Sqlcmd -Username $SQL_username -Password $SQL_password -ServerInstance $server -Database $db -Query $query -QueryTimeout 60000
Write-Host ('end script')

当我使用潮汐用户帐户远程访问文件共享服务器时,脚本会按预期成功执行。

我有一个相应的Tidal作业执行这个test.ps1脚本。这是潮汐工作信息:

命令

C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe

命令参数

-ExecutionPolicy bypass -File D:\some_path\test.ps1
-SQL_username "<SQL_username.1>"
-SQL_password "<SQL_password.2>"

当我通过Tidal运行脚本时,Tidal的输出屏幕显示:

  

开始脚本

     

Invoke-Sqlcmd:术语&#39; Invoke-Sqlcmd&#39;不被识别为名称   cmdlet,函数,脚本文件或可操作程序...

     

结束脚本

因此,很清楚无论用户Tidal使用什么来运行脚本,用户都会识别Write-Host cmdlet,但它无法识别Invoke-Sqlcmd cmdlet。怎么会这样?而且,我该如何解决这个问题呢? (我发现潮汐用户是NT AUTHORITY \ SYSTEM,而不是作业的“运行”选项卡中指定的运行时用户,这与我登录到远程服务器的潮汐用户相同。)

1 个答案:

答案 0 :(得分:1)

SQL模块未加载到SYSTEM的PowerShell配置文件中。在任何invoke-sqlcmd语句之前,您需要运行类似于以下内容的内容:

# For SQL 2008
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100

# For SQL 2012
Import-Module SqlPs

您可能还需要将任务设置为使用用户帐户运行,因为它在以SYSTEM身份运行时将无法访问网络。

相关问题