SQL Server PowerShell

适用于: SQL Server(所有受支持的版本) Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

安装 SQL Server PowerShell

SQL Server PowerShell 模块有两种;SqlServerSQLPS

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

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

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

虽然 SQL Server Management Studio (SSMS) 随附了以前版本的 SqlServer 模块,但仅限 16.x 版本的 SSMS。

要在 SSMS 17.0 和更高版本中使用 PowerShell,则必须从 PowerShell 库安装 SqlServer 模块。

你也可以将 PowerShell 和 Azure Data Studio 结合使用。

为什么模块从 SQLPS 更改为 SqlServer?

要发送 SQL PowerShell 更新,必须更改 SQL PowerShell 模块的标识和名为 SQLPS.exe 的包装器。 由于此更改,现存在两种 SQL PowerShell 模块:SqlServer 模块和 SQLPS 模块 。

若导入 SQLPS 模块,请更新 PowerShell 脚本。

如果具有任何运行 Import-Module -Name SQLPS 的 PowerShell 脚本,并希望利用新的提供程序功能和新的 cmdlet,则必须将它们更改为 Import-Module -Name SqlServer。 新模块会安装到 %ProgramFiles%\WindowsPowerShell\Modules\SqlServer 文件夹。 因此,不需要更新 $env:PSModulePath 变量。 如果脚本使用名为 SqlServer 的第三方或社区版本模块,请使用 Prefix 参数以避免名称冲突

建议使用 Import-Module SQLServer 来启动脚本,以避免在同一台计算机上安装 SQLPS 模块的情况下出现并行问题。

本部分适用于从 PowerShell 而不是 SQL 代理执行的脚本。 可通过使用 #NOSQLPS 将新模块与 SQL 代理作业步骤一起使用。

SQL Server PowerShell 组件

SqlServer 模块随附:

  • PowerShell 提供程序允许使用类似于文件系统路径的简单导航机制。 您可以生成类似于文件系统路径的路径,在该路径中,驱动器与 SQL Server 管理对象模型关联,节点基于对象模型类。 然后,你可以使用熟悉的命令,如 cd(Set-Location 的别名)和 dir(Get-ChildItem 的别名),按照在命令提示符窗口中导航文件夹的类似方式导航路径。 可以使用其他命令,如 ren(Rename-Item 的别名)或 del(Remove-Item 的别名)对路径中的节点执行操作。

  • 一组 cmdlet,它支持运行包含 Transact-SQL 或 XQuery 语句的 sqlcmd 脚本等操作。

  • AS 提供程序和 cmdlet,它们之前是单独安装的。

SQL Server 版本

SQL PowerShell cmdlet 可用于管理 Azure SQL 数据库、Azure Synapse Analytics 和所有支持的 SQL Server 产品的实例。

包含 PowerShell 路径中不支持的字符的 SQL Server 标识符

Encode-Sqlname(ConvertTo-EncodedSqlName 的别名)和 Decode-Sqlname(ConvertFrom-EncodedSqlName 的别名)cmdlet 帮助你指定包含 PowerShell 路径中不支持的字符的 SQL Server 标识符。 有关详细信息,请参阅 SQL Server Identifiers in PowerShell

使用 Convert-UrnToPath cmdlet 将数据库引擎对象的统一资源名称转换为 SQL Server PowerShell 提供程序的路径。 有关详细信息,请参阅 Convert URNs to SQL Server Provider Paths

查询表达式和统一资源名称

查询表达式是使用与 XPath 类似的语法指定一组条件的字符串,用于枚举对象模型层次结构中的一个或多个对象。 统一资源名称 (URN) 是一种特定类型的查询表达式字符串,用于唯一标识单个对象。 有关详细信息,请参阅 Query Expressions and Uniform Resource Names

SQL Server 代理

SQL Server 代理使用的模块不做任何更改。 因此,具有 PowerShell 类型作业步骤的 SQLServer 代理作业使用 SQLPS 模块。 有关详细信息,请参阅如何使用 SQL Server 代理运行 PowerShell。 但是,从 SQL Server 2019 开始,可以禁用 SQLPS。 为此,可以在 PowerShell 类型的作业步骤的第一行添加 #NOSQLPS,这将阻止 SQL 代理自动加载 SQLPS 模块。 执行此操作时,SQL 代理作业将运行安装在计算机上的 PowerShell 版本,然后你可以使用自己喜欢的任何其他 PowerShell 模块。

SQLPS 故障排除

如果代理作业步骤(PowerShell 子系统)失败并出现以下错误,本部分内容可能有助于解决此问题。

作业步骤在 PowerShell 脚本的第 1 行收到错误。 对应行是“import-module SQLPS”。 更正脚本并重新计划该作业。 PowerShell 返回的错误信息是:“未加载指定的模块 'SQLPS',因为在任何模块目录中都找不到有效的模块文件。

SQLPS 模块必须在环境变量 PSModulePath 处可用。 卸载 SSMS 16.x 可能会从 PSModulePath 中删除 SQLPS。 若要检查存储在 PSModulePath 中的当前值,请运行以下 PowerShell:

 $env:PSModulePath -split ";"

如果设置了该路径,会看到一条类似于 C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules 的条目。 如果未设置该路径,在服务器上找到 SQLPS 文件夹,并通过 PowerShell 或“系统属性”>“高级”>“环境变量”添加到环境变量值。

含 SQL 代理的 SQLServer 模块

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

#NOSQLPS
Import-Module -Name SqlServer

Cmdlet 参考

后续步骤