我正在尝试在 SQL 代理作业 (SQL Server 2016) 中设置 PowerShell 脚本。我正在使用第三方模块 DBATOOLS.psd1,这似乎是我遇到语法错误的地方。目前我的 SQL 作业有一行代码失败:
Import-Module e:\dbatools-master\dbatools-master\dbatools.psd1
为什么作业失败并出现以下错误?当我通过 PowerShell ISE 运行此命令时,它运行良好。
Error Message: Unable to start execution of step 1 (reason: line(5): Syntax error). The step failed.
如果您将此作为 SQL Server 代理作业步骤运行,您将需要使用
Operating system (CmdExec)
步骤类型,而不是PowerShell
类型。在其中
CmdExec
,最好在机器上创建一个包含您需要的所有步骤的文件,然后调用它。例如创建一个
C:\PowerShellScripts\MyScript.ps1
包含...的文件powershell.exe "& 'C:\PowerShellScripts\MyScript.ps1'"
然后在CmdExec
作业步骤中调用该脚本。扩展您通常不能将 PowerShell 步骤与另一个模块一起使用的原因是 SQL Server 提供程序。它玩得不好,有一个连接项目可以让 MS 解决这个问题。
如果您添加
$erroractionpreference = 'stop'
到您的作业步骤,您将看到命令错误原因的完整输出:在大多数情况下,提供程序是问题,因为它不知道如何解释某些字符/命令。如果 PowerShell 步骤类型将您置于 PowerShell.exe 主机的上下文中,我们的生活将变得更加轻松,并且可能会发生令人敬畏的事情。
有趣,在我的实验室对我不起作用,但我得到了一个不同的错误。我一直在我们的 SQL2014 环境中使用 Powershell,但我遇到了问题,我认为与 2014 年的 PS 提供程序有关,我一直在使用 cmdexec 命令来启动 powershell 脚本。
我的 SQL 代理步骤在 2016 年看起来像这样,并且有效: