SQL Server PowerShell

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

安裝 SQL Server PowerShell

有兩個 SQL Server PowerShell 模組, SqlServerSQLPS

SqlServer 模組是要使用的最新 PowerShell 模組。

SQLPS 模組隨附於 SQL Server 安裝 (用於回溯相容性),但不再更新。

SqlServer 模組包含 SQLPS 中 Cmdlet 的更新版本,且加入新的 Cmdlet 以支援 SQL 最新功能。

舊版 SqlServer 模組「曾」隨附於 SQL Server Management Studio (SSMS),但僅限 SSMS 16.x 版。

若要使用 PowerShell 搭配 SSMS 17.0 及更新版本,請從 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 參數來避免發生名稱衝突。

如果 SQLPS 模組安裝在同一部電腦上,則建議使用 Import-Module SQLServer 啟動指令碼,以避免發生並存問題。

本節適用於從 PowerShell (而非 SQL Agent) 執行的指令碼。 新模組可與使用 #NOSQLPS 的 SQL Agent 作業步驟搭配使用。

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 Database、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 Agent

SQL Server Agent 所使用的模組沒有任何變更。 因此,具有 PowerShell 類型作業步驟的 SQL Server Agent 作業會使用 SQLPS 模組。 如需詳細資訊,請參閱如何使用 SQL Server Agent 執行 PowerShell。 不過,從 SQL Server 2019 開始,可停用 SQLPS。 若要這樣做,請在 PowerShell 類型作業步驟的第一行上新增 #NOSQLPS,這會阻止 SQL Agent 自動載入 SQLPS 模組。 當這麼做時,SQL Agent 作業會執行電腦上所安裝的 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 Agent 的 SQLServer 模組

如果想要在 SQL Agent 作業步驟中使用 SqlServer 模組,則可將此程式碼放在指令碼的前兩行。

#NOSQLPS
Import-Module -Name SqlServer

Cmdlet 參考

後續步驟