在 SQL Server 代理中运行 Windows PowerShell 步骤

适用于: SQL Server Not supported. Azure SQL 数据库 Azure Synapse Analytics Analytics Platform System (PDW)

使用 SQL Server 代理以在计划时间运行 SQL Server PowerShell 脚本。

注意

SQL Server PowerShell 模块有两种;SqlServer 和 SQLPS 。

SqlServer 模块是当前要使用的 PowerShell 模块。

虽然 SQL Server 安装附带了 SQLPS 模块(用于实现后向兼容性),但该模块不再更新。

SqlServer 模块不仅包含 SQLPS 更新版本的 cmdlet,还包含新的 cmdlet 以支持最新的 SQL 功能 。

PowerShell 库安装 SqlServer 模块。

有关详细信息,请参阅 SQL Server PowerShell

从 SQL Server 2019 开始,可以禁用 SQLPS。 可以在 PowerShell 类型的作业步骤的第一行添加 #NOSQLPS,这将阻止 SQL 代理自动加载 SQLPS 模块。 现在,SQL 代理作业将运行安装在计算机上的 PowerShell 版本,然后你可以使用自己喜欢的任何其他 PowerShell 模块。

要在 SQL 代理作业步骤中使用 SqlServer 模块,可以将此代码放在脚本的前两行。

#NOSQLPS
Import-Module -Name SqlServer

从 SQL Server 代理运行 PowerShell

共有多种类型的 SQL Server 代理作业步骤。 每种类型都与用来实现特定环境(如复制代理或命令提示环境)的子系统关联。 可以对 Windows PowerShell 脚本进行编码,然后使用 SQL Server 代理将这些脚本包括在按计划时间运行或者为了响应 SQL Server 事件而运行的作业中。 可以使用命令提示作业步骤或 PowerShell 作业步骤运行 Windows PowerShell 脚本。

  • 使用 PowerShell 作业步骤以让 SQL Server 代理子系统运行 sqlps 实用工具,该实用工具将启动 PowerShell 并导入 sqlps 模块。 如果正在运行 SQL Server 2019 或更高版本,建议在 SQL 代理作业步骤中使用 SqlServer 模块。

  • 使用命令提示作业步骤以便运行 PowerShell.exe,并且指定导入 sqlps 模块的脚本。

关于内存占用的警告

通过 sqlps 模块运行 PowerShell 的每个 SQL Server 代理作业步骤都启动进程,大约占用 20 MB 内存。 同时运行大量的 Windows PowerShell 作业步骤会对性能产生负面影响。

创建 PowerShell 作业步骤

创建 PowerShell 作业步骤

  1. 展开“SQL Server 代理”,创建一个新作业或右键单击一个现有作业,再选择“属性”。 有关创建作业的详细信息,请参阅 创建作业

  2. 在“作业属性”对话框中,选择“步骤”页,再选择“新建”。

  3. “新建作业步骤” 对话框中,键入作业的 “步骤名称”

  4. 在“类型”列表中,选择“PowerShell”。

  5. “运行身份” 列表中,选择该作业将要使用的代理帐户和凭据。

  6. “命令” 框中,输入将为该作业步骤执行的 PowerShell 脚本语法。 或者,选择“打开”,选择包含脚本语法的文件。

  7. 选择“高级”页设置以下作业步骤选项:当该作业步骤成功或失败时将执行的操作、SQL Server 代理应该尝试执行该作业步骤的次数以及重试的时间间隔。

创建命令提示作业步骤

创建 CmdExec 作业步骤

  1. 展开“SQL Server 代理”,创建一个新作业或右键单击一个现有作业,再选择“属性”。 有关创建作业的详细信息,请参阅 创建作业

  2. 在“作业属性”对话框中,选择“步骤”页,再选择“新建”。

  3. “新建作业步骤” 对话框中,键入作业的 “步骤名称”

  4. “类型” 列表中,选择 “操作系统(CmdExec)”

  5. “运行身份” 列表中,选择具有作业将使用的凭据的代理帐户。 默认情况下,CmdExec 作业步骤在 SQL Server 代理服务帐户的上下文中运行。

  6. “成功命令的进程退出代码” 框中,输入一个介于 0 到 999999 之间的值。

  7. 在“命令”框中,请输入以 PowerShell.exe 开头且参数指定要运行的 PowerShell 脚本的命令。 这些示例类似于从 Windows 命令提示符执行 PowerShell 命令的语法。 若要了解所有可能的语法选项,请参阅 PowerShell.exe -?

    • 示例 1:运行简单的 cmdlet。
         PowerShell.exe -Command "Get-Date"
      
    • 示例 2:通过 SQLCmd.exe 针对当前服务器运行查询(该示例使用 SQL 代理标记替换)。
         PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
      
    • 示例 3:运行 PowerShell 脚本(使用 pwsh.exe它是 PowerShell 7.0 中的可执行文件名称,必须在服务器上安装)。 请注意,脚本的路径对于运行 SQL 代理的服务器而言是本地的。
         PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1 
      
  8. 选择“高级”页设置以下作业步骤选项,例如:当作业步骤成功或失败时将执行的操作、SQL Server 代理应尝试执行该作业步骤的次数,以及 SQL Server 代理可将作业步骤输出写入的文件。 只有 sysadmin 固定服务器角色的成员才可以将作业步骤输出写入到操作系统文件中。

另请参阅